В Git вы можете (и обычно должны) переключать ветки «на месте». Например, если вы находитесь на ветке 'master' и хотите начать работать с веткой 'devel', вы можете просто использовать
$ git checkout devel
и ваша рабочая область будет отражать ветку 'devel'. Обычно вам нужно быть в чистом состоянии, то есть не иметь несвязанных изменений.
Что касается настройки между «рабочим», «домашним» и «пустым» хранилищами:
Во-первых, вопрос конфигурации . Я предполагаю, что как на «рабочем», так и на «домашнем» компьютере настроен «пустой» (или как вы его называете свой пустой репозиторий) с конфигурацией, которая выглядит следующим образом (вы можете использовать «git remote add» для создать его):
[remote "bare"]
url = user@example.com:/path/to/repo.git
fetch = +refs/heads/*:refs/remotes/bare/*
push = refs/heads/*:refs/heads/*
Может быть другая удаленная конфигурация, например, для тегов (например, fetch = +refs/tags/*:refs/tags/*
и т. Д.), Но я опускаю ее для простоты.
Во-вторых, давайте предположим, что вы работаете над веткой 'master', и у вас есть следующая конфигурация для такой ветки как в репозиториях "work", так и в "home":
[branch "master"]
remote = bare
merge = refs/heads/master
Конечно, вы можете иметь аналогичные конфигурации для других ветвей.
Давайте теперь рассмотрим несколько примеров сессий . Вы либо на «работе», либо «дома».
Первое, что вы должны сделать перед началом работы, - это получить обновления из «пустого» хранилища. Здесь я предполагаю, что вы находитесь в «основной» ветке. Вы можете сделать это с помощью «git pull bare» или с помощью указанной выше конфигурации веток просто «git pull»:
$ git pull bare
Updating 8818df8..9ad6770
Fast forward
foo | 1 +
1 files changed, 1 insertions(+), 0 deletions(-)
«Перемотка вперед» означает здесь, что «голое» хранилище находится перед хранилищем, в котором вы работаете (и, тем не менее, у вас нет изменений, которых нет в «голом» хранилище). Если вы работаете либо с «работы», либо с «дома», но не одновременно, это должно быть в вашей ситуации.
Теперь сделайте некоторую работу (это пример только сеанс):
$ edit, edit, edit
$ git commit -a
$ git add somefile
$ git commit -a
$ git commit --amend
Обратите внимание, что вам лучше закончить свою работу, чтобы не было никаких незавершенных изменений, но это не является строгим требованием. Если вы оставите некоторые несвязанные изменения, вы можете закончить коммит до "git pull", но тогда вы не получите ускоренную перемотку вперед, а только слияние. Или вы можете использовать «git stash», чтобы спрятать внесенные изменения, а затем применить stash (распаковать) их после извлечения.
После завершения работы вы вносите изменения в «пустой» репозиторий, чтобы иметь возможность получить доступ к своей работе в другом репозитории.
$ git push bare
Counting objects: 8, done.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (6/6), 493 bytes, done.
Total 6 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (6/6), done.
To user@example.com:/path/to/repo.git
9ad6770..4230584 master -> master
Я надеюсь, что такой пример поможет.