У меня есть репозиторий с двумя отслеживаемыми файлами lfs. Я переношу это репо в репоВ вот так
cd repoB
git fetch repoA somebranch
git checkout -b temp FETCH_HEAD
git rebase someotherbranch
это печатает несколько строк Apply: ... и затем
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
error: Your local changes to the following files would be overwritten by merge:
Assets/HappyFunTimes/HappyFunTimesCore/Server/Resources/HFTOSXServer.bytes
Please, commit your changes or stash them before you can merge.
Aborting
error: Failed to merge in the changes.
Patch failed at 0340 update server
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".
Как это исправить? ПРИМЕЧАНИЕ: ЭТОГО ФАЙЛА НЕ СУЩЕСТВУЕТ В репозитории. Эта проблема, похоже, полностью связана с проблемами с git lfs.
git статус показал это
$ git status
rebase in progress; onto 5af1f30
You are currently rebasing branch 'gamepad' on '5af1f30'.
(all conflicts fixed: run "git rebase --continue")
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git checkout -- <file>..." to discard changes in working directory)
modified: Assets/HappyFunTimes/HappyFunTimesCore/Server/Resources/HFTOSXServer.bytes
deleted: Assets/HappyFunTimes/HappyFunTimesCore/Server/Resources/HFTOSXServer.sha256.bytes
no changes added to commit (use "git add" and/or "git commit -a")
Примечание. Я попытался просто добавить и зафиксировать 2 файла (voodoo), а затем git rebase --continue
, что продолжалось до тех пор, пока в следующий раз файл не был изменен в истории, после чего возникла аналогичная ошибка. Я сделал то же самое, и это, наконец, закончилось. Но затем, когда я попытался перебазировать это на другую ветку, я получил
Downloading Assets/HappyFunTimes/HappyFunTimesCore/Server/Resources/HFTOSXServer.bytes (7.48 MB)
Error downloading object: Assets/HappyFunTimes/HappyFunTimesCore/Server/Resources/HFTOSXServer.bytes (4743b094eeab821140773213ebabdaa81c9ac2eb1be1108e70e8d51ae52873dd)
Errors logged to /Users/gregg/src/hft-unity3d/.git/lfs/objects/logs/20160603T213456.110362284.log
Use `git lfs logs last` to view the log.
error: external filter git-lfs smudge -- %f failed 2
error: external filter git-lfs smudge -- %f failed
fatal: Assets/HappyFunTimes/HappyFunTimesCore/Server/Resources/HFTOSXServer.bytes: smudge filter lfs failed
Could not apply dc378b5d715103e9af0ee805ff2a3be1159739aa... add lfs support
Что предполагает, что я понятия не имею, как правильно использовать git lfs.
обновление 1
Получается, что вам нужно установить git lfs в каждом репо. Это совсем не ясно из документов, в которых говорится
Вам нужно настроить Git LFS только один раз.
git lfs install
Оказывается, это один раз на репо, а не один раз.
Затем, прочитав проблемы, нужно узнать, где взять удаленно сохраненные файлы. Он делает это на основе того, какая удаленная ветвь отслеживается, поэтому, начиная с
git clone [email protected]/me/repoA
cd repoA
git lfs install
git remote add repoB [email protected]/me/repoB
git fetch repoB
git checkout -b temp repoB/somebranch
Это начинает извлекать repoB/somebranch во временный файл, но терпит неудачу с
Downloading Assets/HappyFunTimes/HappyFunTimesCore/Server/Resources/HFTOSXServer.bytes (7.48 MB)
Error downloading object: Assets/HappyFunTimes/HappyFunTimesCore/Server/Resources/HFTOSXServer.bytes (f8c42a7c55f610768ce50ff93d09fc63fa897de867290dafee2e84d64e10de4e)
Errors logged to /Users/gregg/temp/delme-hft-unity3d/.git/lfs/objects/logs/20160603T231351.670335751.log
Use `git lfs logs last` to view the log.
error: external filter git-lfs smudge -- %f failed 2
error: external filter git-lfs smudge -- %f failed
fatal: Assets/HappyFunTimes/HappyFunTimesCore/Server/Resources/HFTOSXServer.bytes: smudge filter lfs failed
Насколько я знаю, сейчас я отслеживаю правильную ветку. Это та же ветка на том же удаленном компьютере, с которого были загружены файлы.
обновление 2
Начнем с последнего, но изменим origin
, чтобы он указывал на repoB после клонирования repoA.
git clone [email protected]/me/repoA
cd repoA
git lfs install
git remote remove origin
git remote add origin [email protected]/me/repoB
git fetch repoB
git checkout -b temp origin/somebranch
Это работает там, где раньше это не сработало
Но сейчас
git checkout -b other master
git branch --set-upstream-to origin/somebranch
git rebase master temp
Сбой в том же месте, что и раньше
Using index info to reconstruct a base tree...
Falling back to patching base and 3-way merge...
error: Your local changes to the following files would be overwritten by merge:
Assets/HappyFunTimes/HappyFunTimesCore/Server/Resources/HFTOSXServer.bytes
Please, commit your changes or stash them before you can merge.
Aborting
error: Failed to merge in the changes.
Patch failed at 0358 update server
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git rebase --continue".
If you prefer to skip this patch, run "git rebase --skip" instead.
To check out the original branch and stop rebasing, run "git rebase --abort".