フォルダー名変更後のGIT SVN dcommit

dcommit folder git git-svn repository
フォルダー名変更後のGIT SVN dcommit

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

状況:

ローカルでGITを使用(gitバージョン1.7.3.1.msysgit.0)+リモートリポジトリはSVN(バージョンは不明)

” ” ‘

問題:

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

” ” ‘

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

  1. SVNリポジトリからの* clone *ブランチ(ローカルに1つのファイルがあります)

  2. * gitにローカルでコミット( `git add .`を含む)

  3. ファイルを含む* oldFolder *を作成します

  4. * gitにローカルでコミット( `git add .`を含む)

  5. * dcommit *をSVNに

  6. * rename * oldFolder→ * newFolder *(IDEまたは手動で名前を変更-しない
    git-mv

  7. * gitにローカルでコミット( `git-add .`を含む)

  8. * dcommit *をSVNに送信します(SVNが唯一のものなので、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」と「newFolder」になりました…​ 一方、「oldFolder」の名前を変更または削除する必要があります(この場合、履歴を失うことはありません)。

ローカルgitマスター/ブランチを反映するSVNリポジトリが必要です…​

” ” ‘

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

  1  0


ベストアンサー

手順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~

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

1


(完全を期すために別の答えを追加する)

`git add –all`は、削除と名前変更を含むすべての変更を追加します。

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

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

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

0


タイトルとURLをコピーしました