37

普段は Tortoise SVN を使っていますが、Mercurial は分散リビジョン管理システムということで調べていました。

両方のシステムで私が探しているのは、ファイルの一部だけを選択してコミットできるツールです。これを今すぐ行う場合は、ファイルの一時バージョンにコピーし、現在のバージョンでコミットする変更のみを保持し、コミット後に一時バージョンを現在のバージョンに再度コピーする必要があります。それはとても面倒なことであり、プログラムは私のためにこれを行うことができるはずです.

Git がこれをサポートしていると聞きましたが、これが正しいかどうか教えてください。

4

6 に答える 6

40

Mercurial は、レコード拡張機能を使用してこれを行うことができます。

各ファイルと各差分ハンクについてプロンプトが表示されます。例えば:

% hg record
diff --git a/prelim.tex b/prelim.tex
2 hunks, 4 lines changed
examine changes to 'prelim.tex'? [Ynsfdaq?]  
@@ -12,7 +12,7 @@
 \setmonofont[Scale=0.88]{Consolas}
 % missing from xunicode.sty
 \DeclareUTFcomposite[\UTFencname]{x00ED}{\'}{\i}
-\else
+\else foo
 \usepackage[pdftex]{graphicx}
 \fi

record this change to 'prelim.tex'? [Ynsfdaq?]  
@@ -1281,3 +1281,5 @@
 %% Local variables:
 %% mode: latex
 %% End:
+
+foo
\ No newline at end of file
record this change to 'prelim.tex'? [Ynsfdaq?]  n
Waiting for Emacs...

コミット後、残りの差分は取り残されます:

% hg di
diff --git a/prelim.tex b/prelim.tex
--- a/prelim.tex
+++ b/prelim.tex
@@ -1281,3 +1281,5 @@
 %% Local variables:
 %% mode: latex
 %% End:
+
+foo
\ No newline at end of file

または、MQ (Mercurial Queues) を使用して、リポジトリ内の個々の変更をパッチに分割する方が簡単な場合があります。レコード (qrecord) の MQ バリアントもあります。

更新:ハンク/行選択への curses インターフェイスを提供するcrecord拡張機能も試してください。

スクリーンショットを記録する

于 2008-09-29T15:43:48.423 に答える
12

はい、git ではこれを行うことができます。このgit addコマンドには-p(または--patch) オプションがあり、変更をハンクごとに確認したり、ステージングするものを選択したりできます (ハンクを調整したり、パッチをその場で編集したりすることもできます)。対話モードを使用して git-add ( git add -i) を実行し、「p」オプションを使用することもできます。

これは、インタラクティブな追加に関するスクリーンキャストで、のパッチ機能も示していgit addます。

于 2008-09-30T04:43:01.887 に答える
8

TortoiseHGをチェックしてください。これは、ハンクの選択を行い、さまざまなコミットに関して1つのファイルにさまざまな変更をコミットできるようにします。

1回のコミットで、他のファイルへの部分的な変更とともに、一部のファイルへのすべての変更をコミットすることもできます。

http://tortoisehg.bitbucket.io/

于 2010-03-01T16:57:46.587 に答える
5

少し前に同様の質問をしましたが、 hgshelve拡張機能を使用した結果、まさに私が探していた答えでした。

コミットを行う前に、さまざまなファイルからの変更(またはファイル内の変更の塊)を「シェルフ」に配置してから、必要なものをコミットできます。次に、コミットしなかった変更の棚を外して、作業を続行できます。

私はここ数日それを使用していて、それがとても好きです。視覚化と使用が非常に簡単です。

于 2008-09-29T22:41:43.690 に答える
0

このように働かないことをお勧めします。

一連の変更が必要な場合、チェックインする準備ができているセット A と、まだ準備ができていないセット B を設定する必要がある場合、セット A をチェックインするだけでビルド/テストが中断されないことをどのように確認できますか? 一部の行を見逃したり、別のファイルの行を忘れたり、A が B に依存して他のビルドを破壊していることに気付かない場合があります。

あなたのコミットは、あなたやあなたのチームの他のメンバーのビルドを壊さない控えめなアトミックな変更でなければなりません。ファイルを部分的にコミットしている場合、不幸な同僚があなたのドアをノックするまで、知らないうちに他の人のためにビルドを壊す可能性が非常に高くなります.

大きな疑問は、なぜこのように仕事をする必要性を感じているのかということです。

于 2008-09-29T15:46:10.383 に答える