2

リモートサーバーがsvnである間、ローカルでgitを使用しています。作業コピー内で多くのファイルとフォルダーを移動する必要がありました。私がしたこと:

  1. git mv SRC_FOLDER DST_FOLDER
  2. git svn dcommit

現在、SVN リポジトリには、すべての古い履歴を含む新しいファイルが含まれています。ただし、git は空のディレクトリを追跡せず、私は を使用しなかったためgit svn dcommit --rmdir、古いディレクトリはすべて svn リポジトリで空のままであり、新しいディレクトリには古い履歴が含まれていません。

変更をコミットした後、古いディレクトリ履歴を新しいディレクトリ履歴に移動する方法はありますか?

4

2 に答える 2

0

SmartGit (クライアント側) とSubGit (サーバー側。ここでは、Subversion にリンクされた、新しく複製された純粋な Git リポジトリが必要です) の2 つのツールを使用してそれを行う方法を説明できます。git-svn はディレクトリの移動をサポートしていません。

ほとんどのファイルが同じディレクトリに移動された場合、どちらもディレクトリ移動検出をサポートします。もともと、ファイルを移動して、任意のツールでプッシュできました。

ステップ 1 (オプション 1)。置換によって現在のコミットを元に戻す必要があります (ローカルに変更がないことを確認してください)。

$ git update-ref my_current_branch <commit_id_before_move>
$ git reset --hard HEAD

ステップ 1 (オプション 2)。...またはその特定のコミットのリバースマージ+コミットによって (その後、ブランチの置換は実行されません)

$ git revert <commit_with_wrong_move>

ステップ 2 (オプション 1)。ここで、変更を再適用する必要があります: ディレクトリの移動

$ git mv SRC_FOLDER DST_FOLDER

ステップ 2 (オプション 2)。...または、変更をもう一度チェリーピックします。

$ git cherry-pick <commit_with_wrong_move>

ステップ 3. 次に、変更をプッシュします。

SubGit の場合: ブランチの置換の場合 (つまり、ステップ 1 のオプション 1 の場合):

$ git push -f

単純な元に戻す場合 (つまり、ステップ 1 オプション 2 の場合):

$ git push

SmartGit の場合は、「プッシュ」ボタンを押します (強制プッシュが必要な場合は、尋ねられます)

元に戻す+やり直すだけで解決できるというのは奇妙に思えるかもしれませんが、主なアクション (ディレクトリの移動) はプッシュ レベル (SVN への変換が開始されたとき) で実行されるため、適切なツールを使用して実行する必要があります。

于 2012-09-16T12:37:03.643 に答える
0

個々のファイルとサブディレクトリをすべて元のディレクトリ (履歴付き) に戻し、新しい (履歴のない) ディレクトリを削除してから、SVN 作業コピー内から名前を再度変更できますか?

于 2012-09-16T07:55:18.170 に答える