Какие простые / хорошие способы в конечном итоге объединить две директории источника? - PullRequest
0 голосов
/ 11 июля 2009

У меня есть исходный каталог, который включает в себя смесь разных языков и файлов. Вероятно, более 100 файлов. Я хочу «раскошелиться» на этот код и создать совершенно другую версию исходного кода. На данный момент у меня будет версия-1 кода и версия-2 кода. Я не буду делать так много развития на версии-1. Я хочу изменить заголовки документации и некоторые другие небольшие изменения. Я буду много заниматься разработкой версии-2, а затем вернусь через месяц или два и объединю версию-2 с версией-1 (установите последнюю версию-2 на версию-1).

Но я не хочу терять какие-либо изменения, внесенные в версию 1 (скажем, после нескольких месяцев небольших исправлений).


Вот некоторые другие условия, которые я бы хотел иметь.

  1. Я не хочу централизованного контроля версий, такого как Subversion (Этот источник в любом случае не находится в Subversion).

  2. Я думал, что мог бы использовать 'git', а затем выполнить git на версии 1 и версии 2 на данный момент. Выполните разработку для версии-1, затем выполните два месяца разработки для версии-2, а затем выполните слияние с git.

Моя единственная проблема с мерзавцем. О. В идеале я хотел бы создать репозитории git «после». Я выполнил ВСЕ свои разработки как для версии 1, так и для версии 2 одновременно, скажем, после двух месяцев разработки для обоих репозиториев. Я бы предпочел сделать это один раз, создав git create репозиторий, чтобы я мог избежать нескольких добавочных коммитов?

B. Я предполагаю, что мне могут понадобиться некоторые инструменты git GUI, когда мне нужно слить? У git есть какие-нибудь инструменты?

С. Я ненавижу файлы репозитория .git, мне придется удалить все это после всех моих разработок в обоих репозиториях. Это может быть трудно очистить.

... вернуться к моим пронумерованным опциям.

  1. Используйте команду diff и patch. Я действительно ненавижу это делать, потому что duff / patch кажется базовым.

  2. Какой-нибудь другой инструмент слияния?

Ответы [ 5 ]

3 голосов
/ 11 июля 2009

git создает только один каталог .git. svn - это каталог, который разбрасывает каталоги .svn в КАЖДОМ каталоге.

Ваше время было бы намного лучше потрачено на изучение полезных команд git (таких как git merge --squash). Используйте git, он будет делать то, что вы хотите без проблем.

<ч />

Edit:

С помощью git вы можете хранить все это в одном месте, переключаться туда-сюда по своему желанию и совершать столько коммитов, сколько захотите.

Чтобы уменьшить конфликты, вы можете захотеть объединить Фазу 1 с Фазой 2 (так как вы делаете редкие изменения в Фазе 1). Но это полностью зависит от вас.

Вот как я бы сделал это с помощью git:

cd /path/to/project
git init
git add .
git commit -m "Initial Commit"

В этот момент вы находитесь в основной ветке с одним коммитом, который называется «Initial Commit». Теперь давайте создадим ветки.

git branch Phase1
git branch Phase2

Теперь для работы на Phase2:

git checkout Phase2
... work ...
git add ...
git commit

Переключитесь на Фазу 1 и сделайте некоторую работу.

git checkout Phase1
... work ...
git add ...
git commit

Переключитесь на фазу 2 и сделайте еще немного работы.

git checkout Phase2
... work ...
git add ...
git commit

В соответствующее время перенесите изменения из Фазы 1 в Фазу 2 (или наоборот):

git checkout Phase2
git merge Phase1
... resolve any conflicts and commit if needed ...

Повтор ... Вы сможете делать столько коммитов, слияний и веток, сколько вам нужно, чтобы оставаться на вершине проекта.

Также используйте git tag ... для создания тегов, которые указывают на данный коммит. Таким образом, вы всегда можете вернуться назад без необходимости перебирать историю.

<ч />

Edit:

Мы запускаем git из командной строки, поэтому я не очень хорошо знаю, какие существуют инструменты GUI. Это не должно быть трудно найти.

Когда вы сталкиваетесь с конфликтом, git помечает файлы как конфликтующие (git status), а также объединяет их как можно лучше. Там, где слияние не может быть завершено, в файлах остаются очень четкие маркеры:

<<<<<<< yours:sample.txt
Conflict resolution is hard;
We went shopping yesterday.
=======
We go shopping today.
>>>>>>> theirs:sample.txt

Таким образом, вы просто удаляете одно из двух и редактируете остаток в соответствии с требованиями.

Такое случается редко и его очень легко убрать.

3 голосов
/ 11 июля 2009

Ваша ситуация называется "ветвью", одной из основополагающих концепций систем контроля версий.

Используйте SVN (или Git, или Hg, или CVS, или ....) и выполняйте работу, и выполняйте правильно .

3 голосов
/ 11 июля 2009

Хотя я не согласен с вашей позицией о том, что не следует создавать репозитории до тех пор, пока через 2 месяца разработки не будет полезен инструмент для объединения целых каталогов: Beyond Compare Помимо сравнения, давайте проведем сравнение папок.

Вот скриншот Beyond Compare , сравнивающий папки .

1 голос
/ 11 июля 2009

Что касается не использования Subversion или аналогичного инструмента контроля версий, вы говорите, что не хотите его использовать? Зачем? Это было бы идеальным решением вашей проблемы.

Во-вторых, вы говорите, что не хотите использовать diff и patch, вы понимаете, что многие системы контроля версий используют те же инструменты diff и patch, которые, по вашему мнению, слишком простые;)

В-третьих, если вы нашли лучший инструмент "diff and patch", вам нужно будет сделать следующее

diff V1_start V1_end> patch_file; патч V2_end patch_file.

Поэтому вы все еще должны сохранять более старую версию программного обеспечения V1 (иначе вы никогда не сможете сделать различий!). Вместо того, чтобы делать это вручную, почему бы не использовать систему контроля версий для отслеживания версий для вас?

0 голосов
/ 11 июля 2009

Мне не совсем понятно, если это то, что вы хотели, но Git может объединять независимые проекты / независимые ветки, которые не имеют общего предка. Например, сам git - это слияние кода git и почтовых инструментов для git (в самой ранней истории git).

...