Ошибка при перемещении хранилища GitHub в другое хранилище - PullRequest
8 голосов
/ 19 марта 2019

У меня есть репозиторий GitHub funfun с длинной историей. У меня есть другой репозиторий GitHub TBD.

Теперь я хочу переместить папку funfun в папку TBD, теперь я буду работать только с хранилищем TBD. Я хочу сохранить историю коммитов funfun.

Я следовал этому решению . Вот результат:

MBP:TBD$ ls
OCaml       README.md
MBP:TBD$ git remote add funfun ../funfun
MBP:TBD$ git fetch funfun --tags
warning: no common commits
remote: Counting objects: 11874, done.
remote: Compressing objects: 100% (4286/4286), done.
remote: Total 11874 (delta 9020), reused 9813 (delta 7494)
Receiving objects: 100% (11874/11874), 21.98 MiB | 20.68 MiB/s, done.
Resolving deltas: 100% (9020/9020), done.
From ../funfun
 * [new branch]      master     -> funfun/master
MBP:TBD$ git merge --allow-unrelated-histories funfun/master
warning: Cannot merge binary files: .DS_Store (HEAD vs. funfun/master)
Auto-merging README.md
CONFLICT (add/add): Merge conflict in README.md
Auto-merging .DS_Store
CONFLICT (add/add): Merge conflict in .DS_Store
Automatic merge failed; fix conflicts and then commit the result.
MBP:TBD$ git remote remove funfun
MBP:TBD$ ls
Addins          bin         package-lock.json   units
OCaml           config          package.json        views
README.md       git.sh          public          webpack.config.js
addin           models          routes
app.js          output.csv      ssl

Когда я смотрю TBD на сайте GitHub, funfun не добавлялся.

Это из-за Automatic merge failed; fix conflicts and then commit the result.? Кто-нибудь знает как это исправить?

PS: либо наличие подпапки TBD\funfun\, либо размещение всех подпапок funfun в TBD (как указано выше) - это нормально, я всегда могу расположить папки позже.

Ответы [ 2 ]

4 голосов
/ 21 марта 2019

Вы сделали большую часть работы.Теперь речь идет только об исправлении конфликтов слияния.Давайте разберемся с этим один за другим.

CONFLICT (add/add): Merge conflict in README.md

Это довольно просто.Файл README.md имеет некоторые конфликты, которые вы можете исправить вручную, отредактировав файл и сохранив все, что в нем требуется.Убедитесь, что вы удалили строки с <<<<<<<, ======= и >>>>>>>, которые используются Git для отображения конфликта.На следующий.

CONFLICT (add/add): Merge conflict in .DS_Store

.DS_Store создан на Mac, и вы можете просмотреть его, запустив ls -a, и обычно его следует игнорировать из системы контроля версий, добавив его в файл .gitignoreв корне каталога репо.Поскольку это еще не сделано, конфликт также возникает с этим файлом.Так что теперь вы должны сначала удалить все вхождения .DS_Store из вашего каталога репо, выполнив следующую команду в корне каталога репо:

find . -name .DS_Store -print0 | xargs -0 git rm -f --ignore-unmatch

Далее, если у вас уже есть файл .gitignore,добавьте строку с .DS_Store к тому же.В противном случае создайте и добавьте запись с помощью команды в корень каталога репозитория

echo .DS_Store >> .gitignore

Далее просто внесите изменения с помощью обычного

git commit -am "Commit message"

Затем нажмите изменения с помощью

git push origin master

Работа сделана!

1 голос
/ 21 марта 2019

Похоже, что конфликты слияния являются проблемой. Обе папки имели файл README.md, поэтому они вызвали конфликт. Выберите тот, который вы хотите сохранить, и это должно работать. Ваше слияние не завершилось из-за конфликтов (это означает, что «исправьте конфликты, а затем зафиксируйте результат»), поэтому все отклонилось от ваших инструкций.

Файл .DS_Store - это скрытый файл, созданный Mac OS X. Я предполагаю, что вы делаете это на Mac? Он не отображается в вашем ls, потому что начинается с. (интерпретируется как скрытый файл). Быстрое решение состоит в том, чтобы удалить его из целевого каталога перед тем, как попытаться выполнить слияние, чтобы не создавать конфликт.

Немного более длинная версия заключается в том, что вы обычно не хотите возвращать эти файлы в git-репо. Довольно часто включать .DS_Store в файл .gitignore и проверять файл игнорирования в репозитории, чтобы git не отслеживал его. Теперь, когда файл уже зарегистрирован, вам все равно придется удалить их из репозитория до слияния.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...