2008-09-29 105 views
37

我通常使用Tortoise SVN,但我一直在尋找Mercurial,因爲它是一個分佈式版本控制系統。我可以僅使用SVN或Mercurial提交部分代碼嗎?

我在這兩個系統中尋找的是一種讓我只挑選文件的一部分並提交它們的工具。如果我現在要這樣做,我必須複製到該文件的臨時版本,並且只保留我想要在當前版本中提交的更改,然後在提交後再次將臨時版本複製到當前版本。這只是一個麻煩,程序應該能夠爲我做到這一點。

我聽說Git支持這個,請讓我知道這是否正確。

+1

爲SVN開發這樣的工具應該相當容易。我想知道爲什麼沒有人做到這一點。 – 2010-06-16 11:51:45

+0

@PavelRadzivilovsky補丁歡迎。我的意思是你可以寫一個補丁並將它發送到dev @郵件列表。 – bahrep 2017-09-08 06:32:42

+0

現在有一個內置的「交互式」提交實用程序,用於Mercurial的開箱即用。請參閱下面的答案。 – Oly 2017-09-18 14:10:56

回答

38

Mercurial可以使用record擴展名來完成此操作。

它會提示你爲每個文件和每個差異大塊。例如:

% 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(水銀隊列)給個體的變化在不同的資料庫到補丁。還有一個記錄的MQ變體(qrecord)。

更新:也嘗試crecord擴展名,它爲hunk /行選擇提供curses接口。

crecord screenshot

+1

可惜沒有一個GUI工具。用GitX做這件事真是太棒了。 – mxcl 2010-02-10 17:20:04

+0

阿門。 GitX是*我使用Git的原因;希望Murky能夠勝任。 (不幸的是,我用開源項目來解決它太多了,儘管我對GitX和Murky都有所貢獻:-) – 2010-02-11 00:16:08

+2

有一個GUI工具:Tortoisehg支持大塊選擇。 – Hauge 2010-03-01 16:55:16

0

我建議不要這樣工作。

如果您必須進行一系列更改,請設置準備檢入的A並設置尚未準備好的B,如何確保僅檢查集A不會破壞您的構建/測試?您可能會錯過某些行,忘記其他文件中的行,或者沒有意識到A在B上爲其他人打破構建的依賴關係。

你的提交應該是謹慎的原子更改,不會破壞你的團隊或其他的構建。如果你部分地犯了一個文件,那麼你會大大增加你在不知情的情況下爲別人打破構建的機會,除非你有一個不愉快的同事敲門。

最大的問題是,你爲什麼覺得需要這樣工作?

5

剛纔我問了一個similar question,結果使用hgshelve extension的答案正是我所期待的。

在您執行提交之前,您可以在「貨架」上放入來自不同文件(或文件中的更改塊)的更改,然後提交所需的內容。然後,您可以取消未提交的更改並繼續工作。

我過去幾天一直在使用它,並喜歡它很多。非常容易可視化和使用。

12

是的,git允許你這樣做。 git add命令有一個-p(或--patch)選項,允許您逐個檢查您所做的更改,選擇要分階段執行的操作(還可以優化區塊或編輯補丁)。您也可以使用交互模式進行混搭(git add -i)並使用「p」選項。

這是screencast on interactive adding,它也演示了git add的補丁功能。

7

看看TortoiseHG,它會做大塊選擇,讓你對不同的提交對一個文件做不同的修改。

它甚至可以讓您對一些文件進行所有更改,並在一次提交中對其他文件進行部分更改。

http://tortoisehg.bitbucket.io/

1

水銀現在提供了一個選項--interactive(或-i)到commit命令,從而使該功能開箱的。

這可以直接從命令行運行,所以如果你是命令行愛好者,它是完美的!

運行

> hg commit -i 

開始交互式會話,允許檢查,編輯和各個更改記錄創建提交。

這與git addgit commit命令的--patch--interactive選項的行爲非常相似。

相關問題