[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: а кто хорошо знает Git?



>>>>> Dmitry E Oboukhov writes:

 DS>> [...]
 DEO>>> все вроде хорошо, но в дереве конфигов переключать бранчи
 DEO>>> нельзя.  можно ли упростить процедуру попадания файла из бранча
 DEO>>> b2 в b1? то есть без промежуточного дерева и без обязательного
 DEO>>> переключения бранчей в рабочем дереве?

 DS>> git pull && git cherry-pick <commit> ?

 DEO> насколько я понял cherry-pick выколупывает из другого бранча
 DEO> коммит и кладет его в текущий бранч.

совершенно верно

 DEO> у меня задача обратная: имеется текущий бранч, из него надо взять
 DEO> файл и всунуть в другой бранч, но так, чтобы дерево на другой не
 DEO> переключать.

 DEO> я чего-то недопонял?

это я неправильно понял задачу.

 DEO> можно пример?

 DEO> вот у меня b1 содержит файлы a b c d b2 содержит файлы a b c d e f

 DEO> находясь в b2 я меняю файл a, хочу чтобы коммит ушел не только в
 DEO> бранч b2, но и в бранч b1, но переключать дерево на b1 мне нельзя
 DEO> (это конфиги работающей системы).

т.е. коммит выполняется на работающей системе?  тогда cherry-pick надо
делать в другом клоне или рабочей копии.  например,

admin@server $ git commit -m "bla-blah-blah"
admin@server $ git push remote-repo

user@ws $ git pull remote-repo
user@ws $ git checkout b1
user@ws $ git cherry-pick <commit>
user@ws $ git push remote-repo

admin@server $ git pull remote-repo

В данном случае server - рабочая система, ws - какая-то другая машина,
remote-repo - общий remote, откуда pull-ятся и куда push-атся изменения.
Т.е. один и тот же репозиторий, одинаково называющийся в обоих рабочих
репозиториях.

С временной рабочей копией процесс может выглядеть таким образом:

admin@server $ git commit -m "blah-blah-blah"
admin@server $ mkdir /tmp/tmp-repo && pushd /tmp/tmp-repo
admin@server $ export GIT_DIR=/path/to/repo/.git
admin@server $ git checkout b1
admin@server $ git reset --hard
admin@server $ git cherry-pick <commit>
admin@server $ git checkout b2
admin@server $ unset GIT_DIR
admin@server $ popd && rm -rf /tmp/tmp-repo

Таким образом файлы в исходном каталоге меняться не будут, за
исключением содержимого .git.

Можно оформить скриптом и назвать его git-cherry-punch-in :-)



Reply to: