GIT SVN dcommit после переименования папки - PullRequest
1 голос
/ 12 октября 2011

Мне не удалось найти аналогичный ответ на мой вопрос.

Ситуация:

Локально с помощью GIT (git версия 1.7.3.1.msysgit.0)
Удаленное хранилищеSVN (не уверен в версии)


Проблема:

Клонировать репозиторий SVN, добавить папку, зафиксировать ее в git и SVN, переименовать папку (не сообщая git),коммитить в git, больше не могу коммитить в SVN.


Шаги по выпуску (репо SVN содержит один файл main.as в корневой папке)

  1. клон ветка из репозитория SVN (теперь есть один файл локально)
  2. коммит для локального git (включая git add .)
  3. create oldFolder с файлом в нем
  4. коммит для локального git (включая git add .)
  5. dcommit в SVN
  6. переименовать oldFolder -> newFolder (переименовать с IDE или вручную - не git-mv)
  7. зафиксировать для локального git (включая git-add .)
  8. dcommit to SVN (не нужно перебазировать SVN, так как я единственный, кто вносит изменения в SVN)

ПРОБЛЕМА : gcom-svn dcommit отвечает:

oldFolder/file.txt: needs update

update-index --refresh: command returned error: 1

Что я пробовал:

  • stash, commit, dcommit, stash apply (тоже самое: требуется обновление)
  • stash, rebase, stash apply, commit, dcommit (тоже самое: требуется обновление)
  • stash, rebase, stash apply, commit, stash, dcommit (то же самое: требуется обновление)

Тот, кто полуработал, должен был позвонить:

svn rm -r oldFolder

, но это закончилось oldFolder и newFolder в SVN ... тогда какЯ хочу, чтобы oldFolder было либо переименовано, либо удалено (в данном случае я не против потерять историю).

Мне нужно репозиторий SVN, отражающий мой локальный мастер / ветвь git ...


Почему я переименовываю файлы без команды git?
Я работаю с большими файловыми структурами и средами IDE, которые я использую для рефакторинга старого кода, переименовывает несколько папок и файлов, вызываявыше сценарий.Я не могу отслеживать и вызывать git rm для каждой удаленной папки.

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

На шаге 7 вы добавили новый файл (newFolder / file.txt), но не удалили старый файл.Вместо шагов 6 и 7 вам нужно будет сделать следующее:

  1. переименовать oldFolder -> newFolder (переименовать с IDE или вручную - не git-mv)
  2. git addnewFolder
  3. git rm -r oldFolder
  4. локальная фиксация

На этом этапе git будет отслеживать переименования (если таковые имеются) и производить корректную фиксацию для SVN.

Если ваше дерево все еще находится на шаге 7, вы можете сделать

git reset --soft HEAD~

, чтобы вернуться к предыдущему коммиту и произвести удаление.

0 голосов
/ 29 января 2014

(добавление другого ответа только для полноты)

A git add --all добавляет все модификации, , включая , удаляет и переименовывает.

Таким образом, следующая последовательность команд обычно «просто работает», даже в случае переименования папок:

git add --all
git commit -m "some msg"
git svn dcommit

На самом деле нам не нужно git rm -r OLD_FOLDER (если, конечно, мы не хотим точно настроить определение индекса Git).

...