Git: скопируйте все файлы в каталог из другой ветки



как мне скопировать все файлы в каталог из другой ветки? Я могу перечислить все файлы в этом каталоге, выполнив



git ls-tree master:dirname


затем я могу скопировать все файлы по отдельности, сделав



git checkout master -- dirname/filename


однако использование подстановочных знаков до сих пор было полным провалом. Это ничего не делает:



git checkout master -- dirname/*.png


хотя я думаю, что могу использовать сценарий bash для этого, должен быть более простой способ, верно?

607   3  

3 ответов:

поскольку вы не пытаетесь перемещать файлы по дереву, вы должны быть в состоянии просто проверить каталог:

git checkout master -- dirname

Если в пути нет пробелов, и вы заинтересованы, как и я, только в файлах определенного расширения, вы можете использовать

git checkout otherBranch -- $(git ls-tree --name-only -r otherBranch | egrep '*.java')

если вы хотите сохранить историю, вы могли бы попробовать это... создайте новый target-branch С master перед экспериментом.

шаги ниже предполагают, что у вас есть две ветви target-branch и source-branch и каталог dir-to-merge что вы хотите слиться в source-branch. Также предположим, что у вас есть другие каталоги, такие как dir-to-retain в цели, которую вы не хотите изменять и сохранять историю. Кроме того, предполагается, что в dir-to-merge.

git checkout target-branch
git merge --no-ff --no-commit -X theirs source-branch
# the option "-X theirs", will pick theirs when there is a conflict. 
# the options "--no--ff --no-commit" prevent a commit after a merge, and give you an opportunity to fix other directories you want to retain, before you commit this merge.

# the above, would have messed up the other directories that you want to retain.
# so you need to reset them for every directory that you want to retain.
git reset HEAD dir-to-retain
# verify everything and commit.

Comments

    Ничего не найдено.