Создайте репозиторий git bare из двух существующих репозиториев.

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

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

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

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

Everything up-to-date

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

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


person Community    schedule 08.07.2016    source источник


Ответы (2)


Шаг 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>
person Swadhikar    schedule 08.07.2016
comment
Это было бы правильно, если бы обе ветки были в Git, но, к сожалению, у его друга есть необработанные файлы, которые не имеют версии Git. - person Tim Biegeleisen; 08.07.2016
comment
@TimBiegeleisen: Согласен! Изменено соответственно. Спасибо, что выделили... - person Swadhikar; 08.07.2016

Вы можете получить блестящий ответ от @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. Я также должен упомянуть, что это будет работать только в том случае, если у вашего друга такая же или почти такая же файловая структура проекта. Если у вашего друга есть файлы, которые находятся в разных местах или называются по-разному, то этот подход не сработает.

person Tim Biegeleisen    schedule 08.07.2016
comment
Звучит достаточно блестяще. +1. Я бы сделал ветку из первоначального коммита и git add --work-tree=/path/to/other/coder add ., а затем объединил две ветки. - person VonC; 08.07.2016