Git -svn fetch не втягивает последние версии
Когда я выполняю
git svn fetch
из моего репозитория, он ничего не возвращает и не обновляет, хотя есть новые коммиты
под svn.
[root]# svn log -l 1 http://example.com/trunk/client-resources/resource-pa
r12958 | ing | 2011-08-22 18:29:57 -0500 (Mon, 22 Aug 2011) | 1 line
SRGENERAL-1468 adding more arrays for pa
[root]# git-svn fetch
[root]# git log -1
commit be19ae4c7d1a3c3da6dd90389aebd6d76792cc71
Author: sltin <[email protected]>
Date: Wed Jun 22 14:30:53 2011 +0000
Fixing the classpath.
git-svn-id: http://example.com/trunk/client-resources/[email protected] 44b83e5a-25ef-0310-8dbe-ee0aa4f92a64
Обратите внимание на различия в версии. В журнале svn перечислены 12958, а в журнале git перечислены последние
svn версии 12406.
Я могу сделать reset до 12406, а затем новую выборку:
[root]# git svn reset 12406
r12406 = be19ae4c7d1a3c3da6dd90389aebd6d76792cc71 (refs/remotes/git-svn)
[root]# git svn fetch
M src/test/java/csl/resource/ioc/AbstractResourceIocTest.java
r12977 = 1b21f560b0354b28fe1a272d7723b1e6fa90a99c (refs/remotes/git-svn)
M src/test/java/csl/resource/ioc/AbstractResourceIocTest.java
r12978 = bf22ea0151a364eb1ca1af37a7a907d5b5cc7420 (refs/remotes/git-svn)
M src/test/java/csl/resource/ioc/AbstractResourceIocTest.java
r12987 = ce922c2eae07f6c12dbbd4175a9c61055b563ee3 (refs/remotes/git-svn)
И когда я проверяю версии журнала, они не изменяются.
Как мне получить git -svn, чтобы вытащить последние версии из svn?
Edit:
Я нашел ответ, данные svn загружаются в неактивный поток, который обычно объединяется в активную ветвь, которая не существует в открытом репозитории. Я попытался сделать reset, но для этого тоже нужна активная ветка. Окончательный ответ:
git reset --soft refs/remotes/git-svn
Ответы
Ответ 1
Я нашел ответ, данные svn загружаются в неактивный поток, который обычно объединяется в активную ветвь, которая не существует в открытом репозитории. Я попытался сделать reset, но для этого нужна и активная ветка. Окончательный ответ:
git reset --soft refs/remotes/git-svn
Ответ 2
git svn fetch
копирует только новые изменения в вашу локальную базу данных объектов, очень похожую на git fetch
- и только синхронизирует базы данных объектов. Он не будет обновлять вашу ветку и рабочую копию. Чтобы получить новые извлеченные изменения в свою ветку, используйте git svn rebase
; он будет повторно применять все ваши локальные изменения поверх последней версии svn.
git svn rebase
сделает перемотку вперед, когда локальных коммитов не будет, поэтому он не должен испортить историю. В качестве альтернативы вы можете использовать git merge --ff-only git-svn
для быстрой пересылки в самую последнюю версию svn (и прервать, если она не является быстрой переадресацией, т.е. Не прямым потомком)
Вы должны использовать только git svn reset
, когда upstream svn изменил историю (svndump/svnadmin), и вам нужно повторно извлечь новые коммиты, но это почти никогда не произойдет (иначе обвините администратора!)
Ответ 3
Я считаю, что вы хотите git svn rebase
. Это отличается от git pull
, но аналогично в том, что оба включают два этапа (выборка из удаленного, а затем переадресация или слияние).
Вы также можете переустановить только уже взятые записи:
git svn rebase --local
Если у вас есть локальные коммиты, которые еще не находятся в SVN, git -svn будет воспроизводить (rebase) их поверх новых SVN-коммитов.