LINUX.ORG.RU

git слияние веток

 


0

1

Есть 2 ветки dev1 и dev2
В ветке dev2 есть фалый которые не должны поподать при мердже в ветку dev1.
Нужно чтобы сливались только файлы ноходящиеся в обоих ветках.

#dev1
file1 file2

#dev2
file1 file2 file3

Чтбы при git merg dev2 в ветке dev1 не появлялся file3

★★

git это content-based vcs, а не file-based как svn. Если есть необходимость отгородить часть файлов, то коммить изменения на file1 file2 в один коммит, file3 в другой, держи в разных бранчах.

x0r ★★★★★
()

у меня когда-то была похожая проблема.

вот что придумалось, на примере 1 файла, который нужно мержить

git rm --cached example_file
git commit
git add example_file
git commit

после этого, последний коммит будет содержать только нужный файл, и можно сделать cherry-pick.

естественно, не будет никакой истории, и это не настоящий мерж.

был бы рад узнать более прямое решение.

waker ★★★★★
()

слить, а потом filter-branch ?

Bad_ptr ★★★★★
()

я бы сделал git diff и поискал бы /dev/null

quest ★★★★
()

сделать бранч из dev2, допустим dev2m, удалить из него всё что не должно попадать в dev1 смерджить dev2m в dev1?

недостаток - много ручной работы (удаление), решается, как написали уже diff и поисков /dev/null.

invy ★★★★★
()

Раздели файлы по коммитам. И сделай cherry-pick.

anonymous
()

придется делать rebase / filter-branch в dev2

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

Файлы, которые есть в обоих бранчах, можно найти следующим образом:

$> comm -1 -2 <(git ls-tree -r --name-only dev1 | sort) <(git ls-tree -r --name-only dev2 | sort)
file1
file2
dmitry_malikov ★★
()

ладно спасибо всем, понятно что готового решения нет, бум скриптик писать для мерджа

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

как вариант подашел, вполне, но не кошерно команды в водить по очередности. Ну или алиас сделаю.

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

Есть мнение, что это неспроста так неудобно. Здесь уже отмечали, что гит оперирует не файлами, а последовательными патчами.

Ну и…

подашел
в водить
поподать
ноходящиеся

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

Я тоже, честно говоря, думаю что такая функция не нужна: откуда вдруг берутся «лишние» файлы? Из-за неправильного коммита или из-за неправильного управления бранчами (изменения, не относящиеся к бранчу, недоделанные, не годные для мерджа изменения) Так может надо подчистить ветку, а потом мерджить. И да, коммитить надо маленькими, тематическими порциями.

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

мне это нужно для конфигов dotfiles, грубо говоря в разных бранчах общие конфиги и индивидуальные.

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

грубо говоря в разных бранчах общие конфиги и индивидуальные.

Сделай отдельные бранчи на общие и на индивидуальные.

baverman ★★★
()

git merge --no-commit && git reset/git rm && git commit

slovazap ★★★★★
()

Выделить файлы, которые есть только в dev2, в отдельную репу (как субмодуль, например). Можно сделать с сохранением истории, если нужно.

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