Хорошо, у меня немного запутанная настройка, где я использую git версии 1.7.9.5 и имею репозиторий git, который на стороне git является клоном открытого репо; и на стороне svn, должен быть клоном удаленного репозитория SVN. С другой стороны, нет ветвей, и все делается в мастер.git svn dcommit совершает неправильный файл?
Удаленный репозиторий не был отключен в течение некоторого времени; он только что вернулся, и мне, казалось бы, удалось загрузить все выдающиеся коммиты через git svn dcommit
.
Проблема в том, что я попытался сделать новое изменение/совершить после этого; и, по-видимому, dcommit
хочет загрузить неправильный файл - и с ошибкой «Transaction out of date»; Я видел How to recover from an unwanted rename using git-svn: "Transaction is out of date", но это, похоже, не отвечает на это.
Установка несколько походит на это:
$ git config -l
svn-remote.svn.url=svn+ssh://[email protected]/remotepath/to/repo_svn
svn-remote.svn.fetch=:refs/remotes/git-svn
..
remote.origingit.url=file:///local/path/to/repo_bare.git
remote.origingit.fetch=+refs/heads/*:refs/remotes/origingit/*
Тогда я достаю из мерзавца местного голого репо:
$ git svn fetch
[email protected]'s password:
$ git pull --rebase origingit master
From file:///local/path/to/repo_bare
* branch master -> FETCH_HEAD
Current branch master is up to date.
$ git status -uno
# On branch master
nothing to commit (use -u to show untracked files)
я проверяю, чтобы увидеть, есть ли отличие от версии SVN:
# https://stackoverflow.com/questions/2426654/git-svn-status-showing-changes-that-are-not-committed-to-svn
$ git diff git-svn HEAD
diff --git a/folder/file.tex b/folder/file.tex
index 7201cc7..3df14bc 100644
--- a/folder/file.tex
+++ b/folder/file.tex
@@ -299,7 +299,7 @@ Test
-% test
+% test
% still testing
$ git diff --name-status remotes/git-svn
M folder/file.tex
... и есть - и это - правильное изменение, в файле folder/file.tex
; так что я пытаюсь нажать/закачивать, что SVN с помощью dcommit
:
$ git svn dcommit --verbose
Committing to svn+ssh://[email protected]/remotepath/to/repo_svn ...
[email protected]'s password:
M notes.txt
Transaction is out of date: File '/notes.txt' is out of date at /usr/lib/git-core/git-svn line 922
Теперь файл я ожидал, который будет загружен в ./folder/file.tex
; но git svn dcommit пытается загрузить ./notes.txt
- который действительно существует, но в этом коммите не было изменений ?!
Интересно, если я здесь:
$ git svn rebase
[email protected]'s password:
First, rewinding head to replay your work on top of it...
$ git diff --name-status remotes/git-svn
$ git svn dcommit
Committing to svn+ssh://[email protected]/remotepath/to/repo_svn ...
$
... то есть, если я git svn rebase
вместо git svn fetch
первых, то нет разницы, признанной между стороной мерзавца и боковой СВН, и, таким образом, я ничего не может получить dcommit
ed (и поэтому я даже не получаю приглашение пароля). EDIT: обратите внимание, что, если я git pull --rebase origingit master
после git svn rebase
, так же, как и раньше происходит (т.е. git diff --name-status
видит правильное изменение, но git svn dcommit
терпит неудачу с «Сделка устарело:»)
Так что мой вопрос - почему git svn dcommit
настаивайте на том, чтобы загрузить этот неправильный файл (в случае, если сначала запущен git svn fetch
) - вместо правильного файла, который в противном случае правильно сообщил git diff --name-status
?? Как я могу это проверить?
И как я могу заставить git svn
правильно синхронизировать локальные изменения git с удаленным SVN?