2

私の質問に対する同様の答えを見つけることができませんでした。

状況:

ローカルで GIT を使用 (git バージョン 1.7.3.1.msysgit.0)
リモート リポジトリは SVN (バージョンがわからない)


問題:

SVN リポジトリのクローンを作成し、フォルダーを追加し、それを git と SVN にコミットし、フォルダーの名前を変更し (git に通知せずに)、git にコミットし、SVN にコミットできなくなります。


問題の手順 (SVN リポジトリには、ルート フォルダーに main.as というファイルが 1 つあります)

  1. SVN リポジトリからのクローンブランチ (現在、ローカルに 1 つのファイルがあります)
  2. ローカルで git にコミットgit add .します (を含む)
  3. ファイルを含む oldFolderを作成する
  4. ローカルで git にコミットgit add .します (を含む)
  5. SVNにコミットする
  6. oldFolderの名前を変更-> newFolder (IDE または手動で名前を変更 - しないgit-mv)
  7. ローカルで git にコミットgit-add .します (を含む)
  8. SVN へのdcommit (SVN への変更をコミットしているのは私だけなので、SVN リベースは必要ありません)

問題: git-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

しかし、これはSVNで終わりました...名前を変更するか削除したいoldFolderのですが(この場合、履歴を失うことは気にしません)。newFolderoldFolder

ローカルの git マスター/ブランチを反映するために SVN リポジトリが必要です...


git コマンドを使用せずにファイルの名前を変更するのはなぜですか?
私は大きなファイル構造を扱っており、古いコードのリファクタリングに使用している IDE は、複数のフォルダーとファイルの名前を変更して、上記のシナリオを引き起こしています。削除されたすべてのフォルダーを追跡して git rm を呼び出すことはできません。

4

2 に答える 2

2

ステップ 7 では、新しいファイル (newFolder/file.txt) の追加をステージングしましたが、古いファイルの削除はステージングしませんでした。上記の手順 6 と 7 の代わりに、次の手順を実行する必要があります。

  1. oldFolder の名前を変更 -> newFolder (IDE または手動で名前を変更 - git-mv ではない)
  2. git add newFolder
  3. git rm -r oldFolder
  4. ローカルでコミット

この時点で、git は名前の変更 (もしあれば) を追跡し、SVN の正しいコミットを生成します。

ツリーがまだステップ 7 にある場合は、次のことができます。

git reset --soft HEAD~

前のコミットに戻り、削除をステージングします。

于 2011-12-01T21:13:50.630 に答える
0

(完全を期すために別の回答を追加します)

Aは、削除や名前変更を含むgit add --allすべての変更を追加します。

したがって、次の一連のコマンドは通常、フォルダーの名前が変更された場合でも「機能します」。

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

実際に行う必要はありませんgit rm -r OLD_FOLDER(もちろん、Git インデックスの定義を微調整したい場合を除きます)。

于 2014-01-29T17:30:50.940 に答える