2012-02-02 94 views
6

我有一個單人文件夾mercurial存儲庫。該目錄結構非常簡單:更改Mercurial中的目錄結構

P104 
    lecture_notes 
    files under version control live here 

一段時間,我意識到我想有倉庫內兩個目錄後,像這樣的

P104 
    lecture_notes 
    files under version control live here (.hg is here) 
    homework 
    more files under version control 

現在,如果我只是想將文件添加到存儲庫,它失敗:

[email protected]:~/P104/lecture_notes$ ll .. 
total 16 
drwxr-xr-x 4 br br 4096 2012-02-02 18:05 ./ 
drwxr-xr-x 4 br br 4096 2012-02-01 20:46 ../ 
drwxr-xr-x 2 br br 4096 2012-02-02 17:44 homework/ 
drwxr-xr-x 4 br br 4096 2012-02-02 18:06 lecture_notes/ 
[email protected]:~/P104/lecture_notes$ hg add ../homework/hw1_P104.tex 
abort: ../homework/hw1_P104.tex not under root 

我的第一個想法是克隆在目錄結構中的回購一個級別,文件添加到克隆,並刪除原來的回購。但是,即使克隆失敗:

[email protected]:~/P104/2011/lecture_notes$ hg clone . .. 
abort: destination '..' is not empty 

所以,問題是,是否還有比創建一個全新的倉庫其他地方這樣做其它的水銀十歲​​上下的方式和複製文件手動?

+1

+1 - 學習版本控制的好方法。 ;) – jmort253 2012-10-20 05:27:53

回答

4

如果水銀回購的根目錄下~/P104/lecture_notes,我寧願:

  1. 在這個新的子命名lecture_notes到P104
  2. 做一個子目錄lecture_notes
  3. 將所有現有文件目錄
  4. add homework及其在更名爲P104目錄中的文件
  5. hg add everythi NG

這樣做是爲了保持.hg回購它在哪裏(~/P104/lecture_notes更名爲~/P104/P104)和重組文件重命名的目錄內。
不需要克隆。

+0

的確很簡單。謝謝! – 2012-02-02 19:32:26

7

我喜歡VonC的解決方案,您不移動.hg文件夾。這是一個直接的解決方案。這裏是一個另類,你移動它,所以必須重命名較少的文件夾:

  1. 移動的.hg文件夾最多~/P104

    $ mv ~/P104/lecture_notes/.hg ~/P104 
    

    從水銀的角度來看,你將有將所有頂級文件移動到lecture_notes目錄中。 homework文件夾中也會突然出現新的未跟蹤文件。

  2. 讓水銀弄不清改名:

    $ hg addremove 
    

    這將正確地檢測出那名頂級文件之前文件現在住在lecture_notes目錄。剛剛添加了homework中的未跟蹤(並且未被忽略)的文件。

  3. 保存更改:

    $ hg commit 
    

總的「絕招」是,在工作拷貝文件是相對於.hg目錄可見。因此,通過在文件系統層次結構中向上移動.hg目錄,我們可以有效地將工作副本文件在工作副本的層次結構中向下移動。

+1

謝謝!很高興知道'addremove'。下一次我遇到這個問題時,會使用這個解決方案(用VonC的方式,我不得不手動'hg add'和'hg remove'文件) – 2012-02-04 12:29:39