2016-02-22 5 views
0

У меня есть git-репозиторий, над которым работает моя команда. Назовем это main репо. Теперь мне потребовалось немного вещей, сделанных внешними, поэтому я взял копию файлов, которые у меня были в репозитории, и просто сделал новый (назовем его snapshot репо).Использование моментального снимка как восходящего потока

В настоящее время оба хранилища содержат некоторые изменения, и я хотел бы мерзавец, чтобы понять, что отправная точка в snapshot репозитария является специфической фиксацией на main репо, а затем объединить изменения из обоих РЕПО. Или вишневый выбор от snapshot, а затем время от времени нажмите здесь новый снимок.

Как вы относитесь к этому? Или сделал копию уже ошибку?

+0

Попытка синхронизации между репозиториями, как если бы они были ветвями внутри одного и того же репо, кажется мне взломанной. Что-то не так с использованием одного репозитория? –

+0

Ну, в основном мне было неудобно делать длинную git-историю публичного проекта для хобби. – vertti

+0

Не могли бы вы создать новую ветку, а затем отбросить некоторые из коммитов? Сбор черри должен использоваться экономно, ИМО, особенно если вы когда-либо планируете слияние полной ветки источника в какой-то момент. –

ответ

0

или было сделано исправление уже имеет значение?

Да. Вы должны были сделать неглубокий клон (с историей 1 фиксации, но сделайте это точно с фиксацией, где вы делаете снимок!) Таким образом, вы сможете делиться фиксациями, потому что у 2 репозитория есть хотя бы фиксация в общий.

Можно еще попробовать сделать что-то с помощью «мерзавца перебазироваться --onto», если история «внешнеположенность» действительно, не содержат слияния ...

Или немного сложнее, но лучше долго временное решение, сделайте мелкий клон, в репозитории, вытащите его в существующий репозиторий и сделайте «замену git», чтобы изменить фиксацию root новым!

0

Внутри мерзавца инструментов, есть скрытая команда, которая должна помочь в вашей ситуации:
git replace

Вот пост объясняет, как вы можете использовать его:
Replace Kicker

Вот один из способов использовать его:

# start with a clone of your main repo : 
git clone myrepo grafting 
cd grafting 

# add a copy of the 'external' repo as a remote : 
git remote add external /path/to/external 
git fetch external 

# your main repo will be referenced as 'origin', the external repo as 'external' 

# * you will need the hash of the original commit from which you created the 
# inital 'external' commit : I will call this commit <base> 

# * you need the hash of the first commit on external : 
# I will call this commit <external> 
git log --oneline external/master | tail -1 

# "replace" the initial commit on external with the commit of your main repo : 
git replace <external> <base> 

Теперь вы должны быть в состоянии использовать большинство команд Git, как если бы external был привит внутри origin.


Мой совет будет: от этого grafting каталога, создать чистый новый репозиторий, который вы затем использовать в качестве эталона для вас, так и внешней команды.

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