Git: отслеживать две ветви, когда файлы по-разному расположены на каждой
Учитывая, что я нахожусь на первой ветке, отслеживаю файлы 'foo' и 'bar', вот так:
my_repository/
./foo
./bar
Как я могу также отслеживать другую ветку (удаленную), где эти файлы 'foo' и 'bar' находятся в другом месте? То есть, когда я проверяю эту вторую ветку, my_repository
папка превращается во что-то вроде этого:
my_repository/
./some_file
./another_file
./tests/
../foo
../bar
Объясняя немного больше: у меня есть первая ветка, отслеживающая удаленный репозиторий, и вторая ветвь, отслеживающая другой удаленный репозиторий.
В какой-то момент я клонировал второй репозиторий где-то еще, добавил foo
а также bar
файлы в tests
папку, и передал ее.
Затем я начал совершать и вносить изменения в свой foo
а также bar
файлы из моей первой ветки, мой официальный клон (origin/master). Теперь я хотел бы также отправить эти изменения во второй репозиторий, а не просто перезаписывать содержимое файлов. Я хотел бы также иметь историю коммитов во второй ветке.
Проблема в том, что этот второй репозиторий помещает мои файлы в другое место.
Какие-нибудь советы?
2 ответа
Похоже, вы ищете стратегию слияния поддеревьев (см. Также здесь).
Там не должно быть никаких проблем. Есть два дерева с некоторым содержанием. Вы объединяете их и помещаете файлы в то или иное место слияния и запускаете это слияние.
Git не отслеживает идентификаторы файлов, но когда он выполняет слияние и замечает файл, который был изменен с одной стороны, но не существует с другой, он ищет файлы с достаточно похожими значениями, чтобы изменения могли иметь шанс применить. Так что, если файлы похожи, git объединит их (и вы можете переместить их в другое место, если хотите), если они будут отличаться, это даст вам обоим, и вам придется выбирать (но чем пытаться объединить в любом случае они будут конфликтовать, поэтому не отслеживание идентификаторов файлов ничего не потеряло).