2011-05-27 128 views
4

這不完全是一個編程的問題,但我認爲它適合在這裏比在TeX group如何使用Mercurial進行文本文檔的版本控制?

我想使用版本控制用於跟蹤文本文件的變化(這是用來創建LaTeX輸出的更好。 (由於我不是程序員,我沒有與版本控制系統更深的體會呢。) 我想用Mercurial是什麼,以及我的工作在MacOS X 10.6。

的文件是關於所以大多每個公司有3個文件:

  • 動機信
  • 簡歷
  • 和一個文件與文憑,證書,...

我有一個關於實事幾個問題:

  1. 我已經一個目錄包含許多子目錄(每個公司一個)。每個子目錄包含2或3 * .tex文件以及輔助文件和生成的pdf。 (有時還包含其他一些關於公司信息的文件)。
    如果我想添加已經存在的文件到新的版本庫中並從每個版本創建一個版本(約有15個版本),我該怎麼做?
    當然,「父母」和「孩子」的關係是不可見的,但至少我可以做一個比較,看看有什麼變化,每個人都會有一個修訂版本號。
  2. 我可以將這些文件保留在原始目錄中,並將它們添加到版本控制系統中,還是必須放在特殊的地方?
    (我想添加其他文件到這些目錄,這些文件將不會被添加到版本控制,我不知道
  3. 我可以給一個「名稱」的修訂(如公司名稱),以便更容易找到它們然後呢?
  4. 什麼是創建新版本的最佳工作流程?
    我會從存儲庫中選擇一個現有版本,將其導出到新公司的新文件夾,更改tex文件,然後將其提交回回購?!

回答

3

起初,我會推薦兩個關於水銀的免費在線資源:hginit 和書Mercurial: The Definitive Guide

現在,您的問題。

我會從第三個開始。是的,可以將名稱附加到修訂版,它們被稱爲標籤。

提交您的現有版本到一個存儲庫的線性歷史請執行以下操作:

mkdir myNewRepo 
cd myNewRepo 
hg init 

現在你有一個新的存儲庫。對於每個公司目錄,重複以下步驟以將您的文件複製到存儲庫中,使它們知曉hg,提交它們並用名稱標記新版本。

cp ../oldVersionA/* . 
hg add letter.tex resume.tex diploma.pdf 
hg commit -m "Job application to A Inc." 
hg tag companyA 

請注意,您只需將每個文件路徑添加到存儲庫一次。

+0

非常感謝你 - 這確實有幫助。昨天晚上我已經下載了GUI MacHG並且玩了一下,但有點困惑:從你的回答中,我明白我可以將來自不同目錄(=公司)的文件添加到存儲庫。 Mercurial會知道(如果文件名是相同的),它應該比較那些在DIFF中具有相同名稱的文件?或者我可以(用這種方法)只跟蹤每個子目錄中的更改嗎? – MostlyHarmless 2011-05-27 07:54:07

+1

@Martin:不,如果您在不同的目錄中添加相同名稱的文件,那麼它們之間沒有連接。請注意,我將這些文件複製到上面的一個目錄中。 – jmg 2011-05-27 08:03:43

+0

啊,好的 - 這就是我已經認爲我必須做的。我將創建一個目錄,將這些文件放入,提交,用另一個版本(相同的文件名)覆蓋它們,然後再次提交......有沒有辦法在不同的子目錄中保存不同的版本?添加所有現有版本後,我將如何創建一個新的版本?我怎樣才能同時在不同的版本(公司)上工作? – MostlyHarmless 2011-05-27 08:24:08

3

My favorite Mercurial tutorial here by Joel Spolsky

enter image description here您可以嘗試使用GUI工具的Mac OS,如MurkyMacHg

這些將幫助您開始。

由於您只想跟蹤修改的線性歷史記錄,因此在控制檯中使用Mercurial可能會很麻煩。圖形用戶界面工具通常會隱藏神祕選項,並只顯示更簡單的可用操作子集。

更新: Mercurial也有一個存儲庫和一個工作目錄。不同之處在於Mercurial的存儲庫本地存儲,全部都存儲在本地。沒有'中央服務器'部分。所有的歷史,標籤,分支都存儲在項目的.hg目錄中。工作目錄只是給定修訂的快照。例如,您的存儲庫歷史記錄有99次提交。工作目錄代碼可以被更新以對應於例如50次提交或98次提交。所以你通過指定提交號(或散列)來「快進」或「倒回」工作目錄。

+0

@Valentin Vasilyev:謝謝你的提示。我已經安裝了MacHG並嘗試了一下。什麼讓我感到困惑:從SVN我知道有一個存儲庫,我可以創建工作副本。在我的情況下,我不知道如何處理不同的版本:我將編輯上面的原始問題.... – MostlyHarmless 2011-05-27 07:51:41

+0

感謝您的更新!我還不明白的是:我可以同時在本地有不同的工作副本嗎? (我需要並行處理幾個應用程序) – MostlyHarmless 2011-05-27 08:26:42

+0

您真的可以真正並行工作嗎?如果是這樣,我羨慕你。通常,工作流程是分支或修訂之間的一系列「切換」。你做了一小部分工作,通過提交修復它,然後更新到另一個分支並在那裏工作。 「平行」的 – Valentin 2011-05-27 08:29:04

13

我對使用Hg沒有什麼可說的,但我想我會分享一些使用git用於我的膠乳文件時的惱人問題(我認爲hg將表現相同)。

VCS最初可能是爲版本控制代碼設計的,通常每行都有一個語句。但是,使用膠乳和其他文本文檔時,寫一段完整的文本是很自然的,不需要將每一行分成單獨的句子。因此,段落中單詞的任何更改都會改變段落中所有其他跟隨單詞的位置,並且當您執行diff時,它會顯示整個段落正在更改。當你有很多文字時,它變得煩人,你去修改,然後一切高亮!這裏有一個小例子:

\documentclass{article} 
\begin{document} 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque blandit lacus aliquet eros tempus non tristique nisl consectetur. Sed orci odio, viverra quis rutrum eu, eleifend eget risus. Nam elementum tempus auctor. Nunc tincidunt dui et mauris varius faucibus ultrices nulla iaculis. 
\end{document} 

提供初步的承諾,使一個小的變化之後,這裏的diff輸出:

enter image description here

我分不清什麼是我作出改變!解決方法是使用可選--color-words,該選項只會突出顯示已更改的單詞。我通常將我的diff設置爲默認使用此選項。你也許可以看看mercurial是否有類似的東西。

enter image description here

雖然混帳記錄了整個段落被改變,它只是強調了已被更改,這對我來說是足夠好的話。


備用解決方案需要對如何編寫膠乳文件進行小改動。考慮這個例子,從上面的例子中修改。

\documentclass{article} 
\begin{document} 
Lorem ipsum dolor sit amet, consectetur adipiscing elit. 
Pellentesque blandit lacus aliquet eros tempus non tristique nisl consectetur. 
Sed orci odio, viverra quis rutrum eu, eleifend eget risus. 
Nam elementum tempus auctor. 
Nunc tincidunt dui et mauris varius faucibus ultrices nulla iaculis. 
\end{document} 

這裏每個句子都有自己的一行。如果你編譯這兩個膠乳的例子,那麼在輸出中就沒有區別。這是因爲膠乳會在一段時間後自動放置一個空格,並忽略單個換行符。現在,當你在一行內進行更改並對其進行區分時,git將僅突出顯示該行而不是整個段落。這是我已經慢慢開始做的事情,儘管起初不能連續閱讀段落令人討厭。

+1

感謝您分享您的體驗!我最近閱讀了一篇關於不同DIFF方法的博文http://martinralbrecht.wordpress.com/2010/03/15/mercurial-latex-and-my-thesis/,並且wdiff可能比正常差異更有意義這樣的文本文件。 (我會看看我是否真的可以使它工作。)對於像我的博士論文這樣的長文檔,我還會在每個句子之後做一個換行符,這使得閱讀源代碼更加容易(恕我直言)(並有助於區分)。但是,在這裏描述的相對較短的文件中,我還沒有這樣做。 – MostlyHarmless 2011-05-27 19:37:56

相關問題