Зачем мне это сообщение об ошибке?
Невозможно определить информацию SVN вверх по потоку из истории HEAD
Ответ 1
(Выложил Чаду "вопрос" в качестве ответа, исправил форматирование и опечатки.)
Есть несколько причин для этого сообщения об ошибке.
Первый, будучи самым распространенным. В вашем 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 из истории HEAD
Если вы получаете вышеуказанные сообщения об ошибках, первым делом проверьте версию git. Если вы используете более старую версию git <= 1.6.3.3. *, Которая была в моем случае с (msysGit), то самый простой способ решить проблему - это обновить ее до последней версии git, такой как 1.6.4. *.
Следующая статья обсуждает проблему более подробно.
Ответ 2
Я получил это сообщение из-за клонирования репозитория svn с опцией --no-metadata
. Может быть, случай с вашей проблемой тоже.
При клонировании без этой опции все в порядке.
Параметр --no-metadata
предназначен для клонирования репозитория SVN, когда новый клон git
должен быть включен в канонический источник в будущем. Он не обладает способностью возвращаться к SVN вверх по течению, потому что у него нет возможности отслеживать различия между клоном git и SVN вверх по течению.
Ответ 3
В моем случае заголовок из репозитория svn должен был соответствовать заголовку из репозитория git. Это должно решить проблему:
git update-ref refs/remotes/git-svn refs/remotes/origin/master
Если вы используете другую ветку git для svn trunk, например svntrunk
, на эту ветку следует ссылаться, то есть:
git update-ref refs/remotes/git-svn refs/remotes/origin/svntrunk
Ответ 4
Я получил это сообщение после того, как я неправильно добавил параметр -s
/--stdlayout
в команду git svn clone
для репо Subversion, в котором не имел "стандартный макет Subversion" trunk
, tags
и branches
относительные пути.
(Репозиции Subversion, которые я обычно клонируют, имеют стандартные относительные пути, поэтому, когда я клонировал репо Subversion, у которого их не было, используя мою обычную команду git svn clone
, я получил это загадочное сообщение. Сообщение на 100% правильно, но почти 100% бесполезно при попытке выяснить, в чем проблема.)
Ответ 5
Вы также можете получить эту ошибку, когда у вас есть проверка только что созданного SVN-репо.
Я решил это
- Сначала выполните начальную фиксацию через команду svn
- Затем клонирование репо с помощью команды git svn.
Ответ 6
получила такую же проблему, вот решение на основе 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...
Ответ 7
Другой причиной этой проблемы является неправильная опция svn-remote.svn.rewriteRoot
(см. этот ответ для получения инструкций по ее использованию).
Строка git-svn-id
в ваших записях, импортированных из Subversion, должна соответствовать URL rewriteRoot
, если она установлена.
Ответ 8
Я получил это сообщение, потому что я использовал полное доменное имя для команды 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 с svn, тогда все остальные имеют git config --add remote.origin.fetch refs/remotes/*:refs/remotes/*
для извлечения ветвей, синхронизированных svn.)
Ответ 9
Другая возможная причина: если у вас установлен svn-remote..rewriteUUID config, 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
Нельзя сказать наверняка, является ли это долговременным решением, т.е. он может запутаться в следующий раз, когда вы "w22 > svn fetch". Можете попробовать символическую ссылку, а не "mv", я не экспериментировал с этим.
Ответ 10
Я увидел это после того, как использовал BFG Repo-Cleaner https://rtyley.github.io/bfg-repo-cleaner/ и переписал историю git (преднамеренно), а затем попытался снова выполнить git svn fetch. Сообщение показывает, что соответствие git <-> svn потеряно.
Чтобы решить эту проблему, прочитайте https://git-scm.com/docs/git-svn
В самом низу показывает:
$ GIT_DIR/СВН/*/. Rev_map.
Отображение между номерами ревизий Subversion и именами коммитов Git. В репозитории, где опция noMetadata не установлена, ее можно перестроить из строк git-svn-id:, которые находятся в конце каждого коммита (подробности см. В разделе svn.noMetadata выше).
Для этого вам нужно иметь комментарии git-svn-id в комментариях к коммиту. Если вы это сделаете, вы можете удалить файл .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
Ответ 11
Это случилось со мной тоже. И я не помню, чтобы сделал что-то необычное. Репозиторий SVN существовал, Git-версия была самой последней. В локальном git-репо было 2 коммита, которые я хотел зафиксировать в SVN. Но когда я побежал:
git svn dcommit
Я получил ошибку.
git svn fetch
и
git svn rebase
не помогло. Я получил ту же ошибку после запуска их.
Я думаю, что проблема могла быть вызвана тем фактом, что я сделал сквош из 2-х локальных коммитов Git ранее. Если по этой причине я до сих пор не понимаю, почему в этом случае проблема с тыквой (если вы знаете, пожалуйста, прокомментируйте ее).
В любом случае я решил проблему, снова клонировав репозиторий svn в другой рабочий каталог.
git svn clone .../trunk
Добавлен проблемный репозиторий Git в качестве удаленного:
git remote add last /cygdrive/c/data/problem_repo
и выполнил проверку всех коммитов, которые еще не были перенесены в SVN. После этого я смог успешно запустить:
git svn dcommit