Не удается определить восходящую информацию SVN из истории головы
Почему я получаю это сообщение об ошибке?
10 ответов:
(опубликовано "вопрос" чада в качестве ответа, исправлено форматирование и опечатки.)
есть несколько причин для этого сообщения об ошибке.
первый, самый распространенный. У вас есть две непересекающиеся истории в репозитории git: история, которую вы сделали в git, и история из удаленного репозитория svn.
чтобы исправить это, вам нужно сделать ваш репозиторий git и репозиторий svn общим предком, чтобы git мог понять, что фиксирует изменились какие.
далее статьи, обсуждает, как исправить проблему:
вторая возможная причина проблемы заключается в том, что у вас есть ранняя версия git (возможно, пакет Windows msysGit), и вы только что создали новый репозиторий git, который взаимодействует с удаленным репозиторием svn.
например:
git svn init svn://svn.xxx.xxx/xxx/trunk git svn fetch -r BASE:10
или
git clone svn://svn.xxx.xxx/xxx/trunk // Adds all the files in the revision...
и вы получаете следующие сообщения об ошибках, при использовании следующих команды.
git svn info
не удается определить восходящую информацию svn из рабочего дерева или
git svn rebase
не удается определить восходящую информацию svn рабочей истории дерева или
git svn dcommit
не удается определить восходящую информацию SVN из истории головы
если вы получаете вышеуказанные сообщения об ошибках, первым шагом является проверка версии git. Если вы используете более старую версию git
далее статьи обсуждает проблему более подробно.
я получил это сообщение из-за клонирования РЕПО svn с . Может быть, это относится и к вашей проблеме тоже.
при клонировании его без этой опции все в порядке.
The
--no-metadata
опция предназначена для клонирования репозитория SVN, когда новыйgit
клон должен стать каноническим источником в будущем. Ему не хватает возможностей для фиксации обратно в SVN вверх по течению, потому что у него нет способа отслеживать различия между клоном git и SVN восходящий поток.
в моем случае голова из РЕПО svn должна была быть сопоставлена с головой из РЕПО git. этой необходимо решить проблему:
git update-ref refs/remotes/git-svn refs/remotes/origin/master
я получил это сообщение после того, как я неправильно добавил
-s
/ доgit svn clone
команда для РЕПО Subversion, которая сделала не есть "стандартный макет Subversion"trunk
,tags
иbranches
относительные пути.(репозитории Subversion, которые я обычно клонирую, имеют стандартные относительные пути, поэтому, когда я клонировал репозиторий Subversion, у которого их не было, используя мой обычный
git svn clone
команда, я получил это загадочное сообщение. Сообщение является 100% правильным, но почти 100% бесполезно при попытке выяснить, в чем проблема.)
получил ту же проблему, вот решение на основе http://eikke.com/importing-a-git-tree-into-a-subversion-repository/ статья:
$ git svn init http://server.com/svn/project/trunk/prototypes/proto1/ $ git svn fetch W: Ignoring error from SVN, path probably does not exist: (160013): Filesystem has no item: '/svn/!svn/bc/100/dcom/trunk/prototypes/ws' path not found W: Do not be alarmed at the above message git-svn is just searching aggressively for old history. This may take a while on large repositories r147367 = 37c9910f794cb9cff7ca0d5d2eb26e1f0dabbc4d (refs/remotes/git-svn) $ svn log http://server.com/svn/project/trunk/prototypes/proto1/ ------------------------------------------------------------------------ r147367 | user | 2014-01-16 18:02:43 +0100 (Thu, 16 Jan 2014) | 1 line proto1 home ------------------------------------------------------------------------ $ git log --pretty=oneline master | tail -n1 71ceab2f4776089ddbc882b8636aacec1ba5e832 Creating template ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #1 $ git show-ref git-svn 37c9910f794cb9cff7ca0d5d2eb26e1f0dabbc4d refs/remotes/git-svn ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ #2 $ echo "71ceab2f4776089ddbc882b8636aacec1ba5e832 37c9910f794cb9cff7ca0d5d2eb26e1f0dabbc4d" >> .git/info/grafts $ git svn dcommit Committing to http://server.com/svn/project/trunk/prototypes/proto1 ... A README.md A pom.xml A src/main/java/.gitkeep A src/main/resources/.gitkeep A src/main/webapp/WEB-INF/web.xml A src/main/webapp/index.html A webapps/.gitkeep Committed r147419 A README.md A pom.xml A src/main/java/.gitkeep A src/main/resources/.gitkeep A src/main/webapp/WEB-INF/web.xml A src/main/webapp/index.html A webapps/.gitkeep r147419 = 6a8bda7262739306d0a6e17eaad2802737dedc35 (refs/remotes/git-svn) No changes between current HEAD and refs/remotes/git-svn Resetting to the latest refs/remotes/git-svn Unstaged changes after reset: M pom.xml M src/main/webapp/index.html A .gitignore Committed r147420 M pom.xml M src/main/webapp/index.html A .gitignore r147420 = 749b5acec55c341672bca08d07de8c336b5a4701 (refs/remotes/git-svn) No changes between current HEAD and refs/remotes/git-svn Resetting to the latest refs/remotes/git-svn ...etc...
вы также можете получить эту ошибку, когда у вас есть проверка недавно созданного РЕПО SVN.
Я решил это с помощью
- Сначала делаем начальную фиксацию с помощью команды svn
- затем клонировать репозиторий с помощью команды git в SVN.
еще одна причина для этой проблемы является неправильным (см. ответ инструкции по использованию этого).
The
git-svn-id
строка в ваших коммитах, импортированных из Subversion, должна соответствоватьrewriteRoot
URL, если он установлен.
я получил это сообщение, потому что я использовал доменное имя
git svn init
команда, но уже существующая интеграция git-svn использовала только имя хоста.например.
grep git-svn-id
показал:git-svn-id: svn://host/repo/...
а я:
git svn init -Ttrunk svn://host.domain.com/repo
(у нас есть машина, которая регулярно синхронизирует git repo с svn, тогда у всех остальных есть
git config --add remote.origin.fetch refs/remotes/*:refs/remotes/*
чтобы получить вниз svn синхронизированные ветви.)
другая возможная причина: Если у вас есть SVN-remote..rewriteUUID config set, git-svn может иметь проблемы с поиском правильных метаданных для репозитория. Например, у вас может быть что-то вроде этого (см. справочную страницу git-svn для обсуждения того, почему вы хотите это сделать):
[svn-remote "svn"] url = svn://read-write.test.org fetch = trunk/project:refs/remotes/trunk rewriteRoot = http://read-only.test.org/svn rewriteUUID = 1234-abcd
... где 1234-abcd-это UUID зеркала только для чтения. Когда вы 'git svn fetch', вы можете получить этот файл:
.git/svn/refs/remotes/trunk/.rev_map.5678-dcba
... где 56780-dcba является UUID чтение-запись репозитория. Исправление заключается в следующем:
$ mv .git/svn/refs/remotes/trunk/.rev_map.5678-dcba \ .git/svn/refs/remotes/trunk/.rev_map.1234-abcd
не могу сказать наверняка, является ли это долгосрочным решением, т. е. он может запутаться в следующий раз, когда вы "git svn fetch". Может попробовать символическую ссылку, а не "mv", я не экспериментировал с этим.
я увидел это после того, как я использовал BFG Repo-Cleaner https://rtyley.github.io/bfg-repo-cleaner/ и переписал историю git (намеренно), а затем попытался снова получить git svn. Сообщение показывает, что соответствие git svn потеряно.
чтобы решить эту проблему, прочитайте https://git-scm.com/docs/git-svn
В самом низу показано:$GIT_DIR / svn/*/.rev_map.
сопоставление между версиями Subversion номера и имена фиксации Git. В репозитории, где noMetadata опция не установлена, это можно перестроить из git-svn-id: линии, которые находятся в конце каждого коммита (см. svn.выше в разделе noMetadata относительно деталей.)
для этого вам нужно иметь комментарии git-svn-id в комментариях commit. Если вы это сделаете, вы можете удалить .rev_map.* файл и перестроить его.
rm .git/svn/refs/remotes/git-svn/.rev_map.* git svn info
Это должно показать:
Rebuilding .git/svn/refs/remotes/git-svn/.rev_map.{snip} ... ... Done rebuilding .git/svn/refs/remotes/git-svn/.rev_map.{snip} Path: . ...and then regular git svn info output