8

Git でファイルやフォルダーの名前を変更するときに履歴を保持する方法については、多くの 優れた 投稿がありました。


これは git コマンドライン インターフェイスで機能します。

#if you don't modify oldname.cpp or newname.cpp, git will understand your rename

git mv old.cpp new.cpp
git commit -am "renamed old.cpp -> new.cpp"

git log new.cpp #only shows the new commit
git log --follow new.cpp #shows ALL the history of old.cpp and new.cpp

このコマンドを使用すると、名前が変更された後の--followすべての履歴を取得できます。new.cppこれは、git へのコマンドライン インターフェイスでうまく機能します。


しかし、 github Web インターフェースでは、 の履歴はold.cpp表示されませんnew.cpp。私のチーム メンバーの多くは、自分の github アカウントを履歴書の一部と見なしているため、これは問題です。ファイルの名前を変更した後、コミットが github に表示されない場合、再開ポイントが失われています。主要なファイル名/ディレクトリの再構築の後、貢献者はレポで単一の目に見えるコミットを持たなくなる可能性があります。

ファイルの名前を変更した後、完全なファイル履歴を github Web インターフェイス (例: ) に表示するにはどうすればよいgit log --followですか?

それとも、カジュアルな github ユーザーが古いコミットを見ないようにしない限り、何も名前を変更しないで立ち往生していますか?

4

1 に答える 1

4

リンクした 3 つの質問からお気づきかもしれませんが、Git にはファイルの移動を追跡するものは何もありません。Git の場合、ファイルが削除され、別のファイルが追加されるだけです。コンテンツの類似性に基づいてファイルの移動を認識するのは、フロントエンドだけです。そのため、GitHub が以前に移動された可能性のあるファイルへの変更の追跡を提供していない場合、GitHub に作業を依頼する以外にできることはあまりありません。

そうは言っても、ファイルを移動すると貢献者が目に見えるコミットなしで終わるというあなたの声明は誤りです。はい、以前に削除された 1 つのファイルの履歴を見ると、そのように思えるかもしれませんが、Git はリポジトリで起こったことを忘れません。また、リポジトリのログには、特定のブランチから表示されるすべてのコミットが引き続き含まれます。そして、これには明らかに、ファイルが移動される前に発生したコミットも含まれます (Git は変更ではなくコンテンツを追跡するため)。通常、コミット ログは で取得できますhttps://github.com/<user>/<project>/commits/<branch>

ここで別のポイントがあります。ログには、特定のブランチから見えるコミットのみが含まれます。したがって、複数のブランチで作業している場合、この全体はとにかくばかげています。貢献者がプロジェクトでどれだけ働いているかを知りたい場合は、 のプロジェクト グラフを使用する必要がありますhttps://github.com/<user>/<project>/graphs/contributors

しかしもちろん、コミット数を測定することは良い指標ではありません ( LOC ratioのようなものと同じです)。

于 2013-09-30T20:26:07.480 に答える