0

У меня есть 'мастер' ветвь с 5 файлами именамиКак отслеживать определенные файлы в ветке Git?

FILE1.TXT
file2.txt
file3.txt
file4.txt
file5.txt

Я разветвленный мастером в «edit_branch ». я сделать эти изменения

edit file1.txt
edit file2.txt
delete file3.txt
delete file4.txt
delete file5.txt
add file6.txt

Когда я сливаю 'edit_branch' для мастеринга, мне нужны эти изменения
file1.txt ->updated
file2.txt ->updated
file3.txt ->no change
file4.txt ->no change
file5.txt ->no change
file6.txt ->added

По существу , файлы, которые добавлены или изменены в новой ветке, должны объединиться в ветке «master». Вышеупомянутые удаления необходимы.

Любые предложения о том, как разветвить и настроить репо?

ответ

0

Вы слились с мастером?

лс Licence.txt MyPatch.patch Readme.txt

git branch test 
git checkout test 

гт Licence.txt

git status : test deleted:  Licence.txt 
git add --all 
git commit -m "Remove Readme.txt" 

лс Licence.txt MyPatch. patch

git checkout master 

лс Licence.txt MyPatch.patch Readme.txt

git merge test : Readme.txt | 2 -- 1 file changed, 2 deletions(-) 
       delete mode 100644 Readme.txt 

LS: Licence.txt MyPatch.patch

3

Это является вопрос, касающийся фундаментальное поведение git. Вы хотите объединить изменения из ветки в другую ветку, обрабатывая удаления как «без изменений».Но в принципе, я думаю, это невозможно, потому что git рассматривает удаления как изменения и, следовательно, отображает удаления при слиянии.

В вашем конкретном случае мастер по-прежнему содержит файлы file3.txt, file4.txt, file5.txt, и эти 3 файла в каком-либо смысле не модифицированы мастером ветвления.

Но в ветке 'edit_branch' они были удалены (желательно git rm) и, следовательно, изменены на edit_branch.

Итак, теперь, если вы объедините «edit_branch» в master, git увидит, что мастер в основном является предком-фиксацией edit_branch и, следовательно, сделает быстрое переключение, просто назначив последнюю фиксацию edit_branch как master. Это означает, что он всегда будет отражать удаления.

Но если файлы на master изменены после создания edit_branch, тогда git по крайней мере покажет слияние CONFLICTS на удаленных файлах, сообщив вам о том, какие файлы были удалены и, следовательно, необходимо позаботиться.

Итак, в принципе нет прямого способа делать то, что вы хотите сделать. Но вероятным обходным решением было бы сделать некоторые фиктивные модификации (например, добавление единого пробела в конце/или запись комментария, объясняющего, почему было сделано изменение) для всех файлов на главном компьютере сразу после создания edit_branch. Тогда даже если вы переключитесь на edit_branch и случайно удалите некоторые файлы, по крайней мере, вы получите уведомление об этом во время слияния и получите возможность обработать его до слияния.

Я хотел бы добавить, что такие сценарии удаления-слияния никогда не являются действительно полезными ни в каких известных случаях использования. Когда вы удаляете некоторые файлы в ветке только для того, чтобы сохранить каталог в чистоте и сделать отрасль намеренно отличной от ядра, вы не объедините ее в ядро ​​после этого. Например, в случае github-страниц мы создаем ветви gh-pages и удаляем каждый файл, отличный от веб-страниц в этой ветке, эффективно скрывая ненужный контент от ветки. Но мы не находим необходимости объединять gh-страницы с ведущими.

PS. Если вы вернетесь домой во время созыва, подумайте о покупке мне пива :)

+0

Благодарю вас за подробное объяснение. Но это все еще не решает проблему. Самое близкое, что у меня было, - это создать только модифицированные и добавленные файлы для фиксации и в некотором смысле сделать частичное слияние с мастером. Обходной путь легко пропустить. Прокладывает ручные шаги. : | –

+0

i не похоже, что есть прямое решение этой проблемы :( –

 Смежные вопросы

  • Нет связанных вопросов^_^