Как модифицировать обновляемый клон чужого проекта?
Здравствуйте. подскажите пожалуйста, как решить такую задачу.
Есть открытый репозиторий некоторого проекта в github, который регулярно обновляется его авторами.
Я хочу клонировать себе этот репозиторий и переписать один файл с исходным кодом.
Репозиторий регулярно обновляется и мне нужно, чтобы я мог обновлять свой клон и при этом чтобы измененный мной файл оставался моим, т.е. не затирался из исходного (склонированного) репозитория.
Как такое организовать? какими командами гита?
Самый простой способ обновления:
git pull --rebase
Ваш коммит с изменённым файлом будет вставать каждый раз поверх обновлённого main.
В случае конфликта — разрешаете его и потом
git add ваш файл
git rebase --continue
Никакие дополнительные ветки не нужны.
Это если вы ничего не утаили в вопросе.
С форком например, а не клоном, последовательность операций слегка другая.
Клонируйте оригинальный репозиторий. В клоне заведите собственную ветку, в нее вносите свои изменения.
Когда авторы обновят свой репо обновляйте master клона из оригинального репозитория, затем делайте rebase своей ветки на новый мастер с разрешением конфликтов.
pfemidi, Можно и merge, главное не менять master.
Но я бы делал интерактивный rebase. Как мне кажется, rebase, в данном случае, выглядит более простым и логичным вариантом.
Получается что у меня будет локальный репозиторий - клон удаленного репозитория автора.
А когда я создаю ветку, то она будет в том же локальном репозитории?
А можно ли сделать так, чтобы склонированный репозиторий был связан с оригинальным удаленным репозиторием (чтобы обновлять master клона), а свою ветку синхронизировать со своим удаленным репозиторием?
Руслан, Да, у вас в локальной репе будет клон оригинального мастера.
Да, в локальной репе будет хранится и ваша ветка.
Локальный репозиторий можно связать с кучей разных удаленных репозиториев. По сути это просто означает, что в конфиг локального репозитория вы добавляете записи о других удаленных репозиториях. И их можно использовать в командах git.
В локальном репозитории настраивается несколько удаленных репозиториев с которыми он может синхронизироваться: git remote --help
При клонировании оригинального репозитория у вас автоматически добавится запись origin с соответствующим URLом. Свой удаленный репозиторий вы должны будете добавить сами через git remote add. Когда на github создаете новый репозиторий, то он там предлагает несколько вариантов инициализации локального репозитория с этим, один из вариантов - команда git remote add, используйте эту подсказку github (если вы его используете).
При обновлении мастера будете указывать origin, при пуше своей ветки - свой удаленный репозиторий.
res2001, origin по умолчанию это тот репозиторий из которого сделан clone.
Если из оригинального репозитория был сделан форк, а из него clone, то origin'ом будет форк.
Нельзя так делать. А если поменяется файл так, что с другими файлами уже работать не сможет? Грубо говоря меняются методы/апишка и все такое - и вот уже ваш файл полностью несовместим с остальным проектом.
Обычного мержа хватит, но придется контролировать руками конфликты. Ну и вносить изменения минимально модифицируя сам исходный файл (зависит от языка, архитектуры и еще кучи вещей)
Ну, я согласен на то, что после такого "слияния" нужно прогнать тесты и поправить свой файл так, чтобы он соответствовал и компилировался (или предположим, что этот файл не приводит к конфликтам).
Как склонировать я знаю, а вот изменение моего файла - нужно делать в новой ветке? и как потом накатить обновления из репозитория и что потом сделать, чтобы мой файл снова оказался актуальным?
и что потом сделать, чтобы мой файл снова оказался актуальным?
смотря какая там функциональность
так может быть, что там новые изменения полностью противоречат вашим, или вообще те файлы, с которыми вы работаете — их нет уже, то есть ваше решение просто мимо