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: