2012-04-11 2 views
0

Я довольно новичок в git, так что простите меня, если это очевидно (или невозможно)!слияние изменений в git repo, как если бы они были в прошлом

Я использую его для сайтов CMS. Я часто сталкиваюсь с ситуацией, когда я вносил изменения в сторонний компонент, который затем обновляется.

Как добавить изменения из обновленного компонента, как если бы они произошли до моих изменений? или это «история переписывания»?

Создать ветку из старой фиксации, где компонент был введен, добавить обновленный код и затем слить его в мастер? подмодуль? или я лаяю неправильное дерево, и эта ситуация лучше обрабатывается по-другому?

ответ

4

(первоначально этот ответ считается, что компонент третьей партии пришел от мерзавца репо общественности, @ Яаки-Дорман пояснил, что он получает обновления пути копирования кода компонента из снимок более крупного проекта)

Вы должны поддерживать хранилище с две ветви:

  • master: каждый раз, когда вы получаете новый снимок компонента, зафиксировать ее в этой отрасли
  • tweaks: ветвь построена на master ветви, которая содержит коммиты, которые составляют пользовательские ухищрения

Каждый раз, когда вы обновляете «мастер» ветвь с новыми снимками компоненты, перебазироваться в tweaks ветви на вершине master отрасль:

$ git rebase master tweaks 

Это оставит ваши твики, как эффективно будучи последнее, что случилось.

Так, начиная с самого начала, это то, что это будет выглядеть как в командной строке ...

захватить первый снимок & хранить его на «мастер» ветви

mkdir my-fork-of-shinything 
cd my-fork-of-shinything 
git init 
cp -R /tmp/shinything-snapshot-1 . # copy the snapshot of code into your repo 
git add -A // stages ALL directory contents for commit 
git commit -m "V1 snapshot of the shinything component" 

Это настраивает ветку «мастер».

Добавьте щипки на ветке новой «щипки»

git checkout -b tweaks // creates your new branch 
... make your tweaks, commit them 

Позже, когда некоторые интересные обновления были сделаны для оригинального компонента ...

захватить новый компонент снимок, обновление «мастер» & «щипки» ветви

git checkout master 
rm -Rf * // delete the contents of the old snapshot 
cp -R /tmp/shinything-snapshot-2 . // get the brand new snapshot in place 
git add -A 
git commit -m "V2 snapshot of shinything, brings fix for #234" 

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

git rebase master tweaks // re-bases the commits from your tweaks branch 

Другие настройки?

Если вам нужно добавить больше настроек, просто проверить ветку, и добавить их:

git checkout tweaks 
... make your tweaks, commit them 
+0

Будет ли это работать если у меня уже есть свои хитрости, чтобы справиться с мастерством? т.е. Вернитесь назад, когда shixthing был добавлен в репозиторий и создал ветку для хранения обновлений для shinything? –

+0

Я все еще не понимаю, как это сделать в обратном порядке. shinything - это компонент, который недоступен при управлении версиями. Это часть более крупного проекта, и я буду периодически загружать новую версию и добавлять изменения новой версии, которые будут добавлены до моих настроек. –

0

простой команды для вас, git pull --rebase

Br, Tim

+0

Не могли бы вы объяснить это немного больше? –