Подтвердить что ты не робот

Невозможно определить информацию SVN вверх по потоку из истории HEAD

Зачем мне это сообщение об ошибке?

4b9b3361

Ответ 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