LINUX.ORG.RU

GIT, не могу осилить commit...


0

1

Пытаюсь отправить изменённый код в удалённый репоозиторий.
У себя создал новый бранч командой git checkout -b new_feature
Внёс изменения в код, выполнил git commit -a -m «This is new cool stuff...»
затем git push origin new_feature
На удалённом сервере появился новый бранч. Для тестирования кода временно переключился на новый бранч командой git checkout new_feature, выполнив её по ssh.
Смотрю код по ftp, новый код появился.

Теперь у себя вношу изменения в код в этом бранче, делаю опять commit -a -m «Some fix...»
git push origin new_feature
Смотрю по ftp код, изменений нет, смотрю по ssh git status, там такое:
# On branch refs/heads/new_feature
# Updated but not checked in:
# (will commit)
#
# modified: functions/display.php

Вроде бы дальше нужно по ssh выполнить commit -m «message...», выполняю, из git status это сообщение пропадает, в git log появляется информация об этом коммите с текстом «message...», но в коде на сервере никаких изменений. ЧЯДНТ?

Ответ на: комментарий от megabaks

Ну пробовал и просто с master работать, вносил изменения в код, делал commit -a -m «message» затем git push origin master, а там в коде изменения не происходят, в git status на удалённом сервере висит такое же сообщение:
# Updated but not checked in:
# (will commit)
#
# modified: functions/display.php

firestarter ★★★☆
() автор топика
Ответ на: комментарий от megabaks

А есть по git мануал из разряда «скопируй эти 6 строк, и все заработает», для поднятия git-репозитория в локалке?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от firestarter

>Ну пробовал и просто с master работать, вносил изменения в код, делал commit -a -m «message» затем git push origin master, а там в коде изменения не происходят
а предварительно сканировал всё дерево?
это именно и делает git add *
git commit * - это что-то типа diff-а + каммент

megabaks ★★★★
()
Ответ на: комментарий от megabaks

У меня есть только один доступный сервер с внешним ip, разрешающий активные ftp и ssh. И я совершенно не представляю как, зайдя на него, можно сделать обновление файлов, лежащих на другом компьютере...

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от megabaks

>а предварительно сканировал всё дерево?

это именно и делает git add *


А чего его сканировать? Я сделал git clone, отредактировал один файл, делаю commit -a (это то же самое что и последловательность git add отредактированный/файл и затем просто commit, чтобы не приходилось вручную имена изменённых файлов указывать).

firestarter ★★★☆
() автор топика

Всё просто. Новые коммиты у тебя закачались на сервер и обновили бранч, но удалённый working tree не изменился. (а с чего бы ему измениться?)
На удалённой стороне посмотри git log и убедись что изменения прилетели.
Потом сделай на удалённой стороне git merge или git checkout и твой working tree изменится.

Не думай о гите с позиции сервер-клиент, думай с позиции клиент-клиент.

Nao ★★★★★
()
Ответ на: комментарий от Nao

>На удалённой стороне посмотри git log и убедись что изменения прилетели.

Смотрел, есть информация о новых коммитах.

Потом сделай на удалённой стороне git merge

Просто merge, без параметров?
git merge
Usage: /usr/bin/git-merge [-n] [--no-commit] [--squash] [-s <strategy>]... <merge-message> <head> <remote>+

или git checkout

Про git checkout на удалённой стотоне писал выше, в git status там пропадает сообщение Updated but not checked, но в коде изменения не появляются.

firestarter ★★★☆
() автор топика

Очень плохая идея. Обычно делается так:

1) На сервере заводится bare репа (git init --bare).

2) Если надо обновлять код на сервере при коммите в этот репозиторий, то просто вешается post-update хук:

echo 
echo "Updating whatever"
unset GIT_DIR
cd /working/dir/but/not/a/bare/repo/dir
/usr/local/bin/git pull

3) Внезапно, PROFIT!

baverman ★★★
()
Ответ на: комментарий от firestarter

> Про git checkout на удалённой стотоне писал выше, в git status там пропадает сообщение Updated but not checked, но в коде изменения не появляются.
А, понял. У тебя как-будто бы есть локальные изменения, а на самом деле это просто старая версия файла. Тебе нужно сделать git reset --hard new_feature на удалённой стороне.

Другой вопрос, как ты смог сделать git push ? У меня, в случае не-bare репозитория он ругается что не будет обновлять checked out бранч и нужно включить параметр receive.denyCurrentBranch чтобы он всё же продолжил.

git 1.7.0.4

Nao ★★★★★
()

man gittutorial или google://git+magic

xorik ★★★★★
()
Ответ на: комментарий от Nao

>Другой вопрос, как ты смог сделать git push ? У меня, в случае не-bare репозитория он ругается что не будет обновлять checked out бранч

А что это такое, bare-репозиторий?
Тут ещё проблемы возможно из-за того что на сервере гит старый. Какая там версия, не посмотрел вчера, но там древняя Федора какая то.

firestarter ★★★☆
() автор топика

1) центральный сервер (гитхаб, можно завести свой на gitosis или gitolite)
2) клиент, на котором правишь код
3) боевая копия (можно на той же машине, где центральный сервер - понимая, что сервер и боевая копия - это не одно и то же)

делаем так:
1) изменяем файлы на клиенте и толкаем на центральный сервер
2) тянем изменения с сервера на боевую копию
3) профит

stevejobs ★★★★☆
()
Ответ на: комментарий от firestarter

>А что это такое, bare-репозиторий?

Это я уже выяснил...

firestarter ★★★☆
() автор топика
Ответ на: комментарий от stevejobs

>1) центральный сервер (гитхаб, можно завести свой на gitosis или gitolite)

2) клиент, на котором правишь код

3) боевая копия (можно на той же машине, где центральный сервер - понимая, что сервер и боевая копия - это не одно и то же)



Суть такова. На сервере в рабочем каталоге php код, который рабочий (тоесть боевая копия). Задача такая. На локальной машине возникает необходимость внести изменения, сделать комит и пушнуть туда.

делаем так:

1) изменяем файлы на клиенте и толкаем на центральный сервер


2) тянем изменения с сервера на боевую копию


3) профит



В том то и дело что не профит. Эта банальность не проходит.
После commit -a и push origin master там в коде изменения не появляются, но если по ssh на сервере посмотреть git log, информация о коммите есть. Если смотреть там же на сервере git status, то там такое сообщение:
# Updated but not checked in:
# (will commit)
#
# modified: functions/display.php
Если там же на сервере по ssh выполнить commit, в git status это сообщение пропадает, в git log появляетя информация о новом коммите, но изменения в коде всё так же не появляются.
Всё это я выше уже описывал.

firestarter ★★★☆
() автор топика
Ответ на: комментарий от firestarter

> В том то и дело что не профит. Эта банальность не проходит.
stevejobs говорит о трёх репозиториях(клиент, сервер, боевая копия), а в твоей схеме только два.
Должно быть так:
Клиент (нормальный реп) <=> Сервер (bare реп) <=> Боевая копия (нормальный реп).

Делать «сервер» на гитхабе или поднимать гитосис/гитолайт имхо тут лишнее, достаточно обычного файлового репозитория.

Создай новый bare реп на сервере, а затем отклонируй его там же (боевая копия) и с удалённого сервера (клиент)

Nao ★★★★★
()
Ответ на: комментарий от Nao

>Создай новый bare реп на сервере, а затем отклонируй его там же (боевая копия) и с удалённого сервера (клиент)

Так после каждого коммита придётся производить по ssh лишние действия...

firestarter ★★★☆
() автор топика

Вобщем, приходится делать так:
У себя делаю commit -a -m «New commit...» и push.
Затем, зайдя по ssh на сервер, выполняю commit -f, после чего изменения появляются в файлах там.

firestarter ★★★☆
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.