2016-07-08 5 views
3

Я разрабатываю код с другим программистом. Поскольку в начале мне приходилось добавлять новые модули без изменения существующего кода, я скопировал исходный код другого программиста, и я начал разрабатывать свой. Поскольку я всегда работаю с git, я создал репозиторий git и выполнил некоторые коммиты.Создайте git bare repo из двух существующих репозиториев

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

  • У меня есть локальный Git репозиторий с измененными файлами и новыми файлами
  • Другой программист имеет папку (без мерзавца) с измененными файлами

Мы wolud как объединить наши изменения и начать использовать git. Я попытался создать голый репо в общей папке, используя его код в качестве отправной точки (т. Е. git --bare в его ранее не проверенной папке). Затем я добавил это репо в свою удаленную команду, используя git remote add origin /path/to/local/bare/repo. Тогда я попытался оттолкнуть мои изменения (которые могут содержать конфликты) с push origin master, но я geot следующее сообщение:

Everything up-to-date

Однако если посмотреть на мой исходный код и на один в голом репо, мой изменений нет.

Как я могу отправить два кода, один без git, а другой, отслеживаемый git, в тот же самый голый репозиторий, чтобы запустить общий контроль версий?

ответ

0

Шаг 1: Предполагая, что ваш друг сделал git init --bare, чтобы создать голый репо. Скопируйте изменения своего друга здесь. В этом каталоге действует общий центральный магазин.

Шаг 2: После того, как вы уверены, что если шаг 1 завершен сделать следующий раз вы сделали с вашими местными фиксациями:

1. git pull origin <branch> --> At this point you must see if there are new files/changes 
2. git merge <branch> --> At this point you must see conflicts and modifications 
3. git push origin <branch> 
+2

Это было бы правильно, если бы обе ветки были в Git, но, к сожалению, у его друга есть необработанные файлы, которые не являются Git-версиями. –

+0

@TimBiegeleisen: Согласен! Изменено соответственно. Спасибо, что выделили ... –

1

Вы можете получить блестящий ответ от @VonC или @torek, но с моей точки зрения одна из возможностей - создать новую ветку из вашего кода с версией Git, а затем использовать ее для слияния. В эту новую ветку вы можете переписать свои файлы тем, кого изменил ваш друг. Так что, если ваша текущая ветвь была master, вы могли бы предпринять следующие шаги:

git checkout master      # switch to 'master' branch 
git checkout -b merge_branch   # create 'merge_branch' from 'master' 
cp -r /path/to/friend/ /path/to/you/ # copy friend's files into merge branch 
git commit -m 'changes from friend'  # commit this friend's work 
git checkout master      # back to the 'master' branch 
git merge merge_branch     # merge with friend's work 

Вы теперь, вероятно, есть тонны конфликтов, но, по крайней мере, он может быть обработан в Git. Я должен также упомянуть, что это будет работать только в том случае, если ваш друг имеет ту же самую или почти такую ​​же структуру файла проекта. Если у вашего друга есть файлы, которые находятся в разных местах или называются разными вещами, тогда этот подход не будет работать.

+1

Звучит довольно блестящим. +1. Я бы сделал ветку из первоначальной фиксации, а 'git add -work-tree =/path/to/other/coder add .', а затем объединить две ветви. – VonC