2009-09-23 69 views
6

我已經在生產環境中,我試圖版本控制下移動大量應用。所以,我創建了一個新的repo並導入了應用程序,減去了不應受版本控制的各種目錄和文件。現在,我需要使已安裝的副本成爲結帳(但仍保留額外的文件)。在這一點上,在SVN的最新版本中,我只需使用--force選項在現有目錄的頂部結帳。但不幸的是,我有一個古老的SVN版本,從之前的--force選項被添加(並且還不能升級......長篇故事)。複製從結帳.svn目錄到非結算,使之成爲結賬

所以,我檢查了應用程序到另一個目錄,並希望只是所有的.svn目錄複製到原來的目錄,從而把原有的成結賬,而只留下多餘的文件。現在,也許我只是有一個艱難的一天,錯過了在普通網站上的東西,但我似乎無法弄清楚這一點。這是到目前爲止,我已經試過的方法:

  1. 使用rsync:我似乎無法觸及的包括最佳組合,並排除指令遞歸捕獲所有的.svn目錄,但沒有別的。

  2. 使用CP:我不能想出一個好辦法把它打跨上下貫通整個應用程序的所有.svn目錄。

  3. 使用找到-exec CP:我正在與找到的文件搞亂了目標路徑的路徑名的前導部分的麻煩。我可以使用-printf'%P'來排除它,但似乎並沒有進入exec的替代品。

  4. 使用找到xargs的到CP:我遇到麻煩找送父母送之前在子目錄。不幸的是,find沒有--breadth選項。

有什麼想法嗎?

其他信息:

  • 慶典3.0.0.14
  • 的rsync 2.6.3 P28
  • CP 5.2.1
  • SVN 1.3.2
+0

請確保您記得正確設置.svn文件夾的權限,否則它可能是潛在的安全漏洞。該網站解釋這個問題 http://www.adamgotterer.com/2009/01/26/hacking-the-svn-directory/ – Joshua 2009-09-23 21:43:47

回答

6

使用tar和find在乾淨的結帳中捕獲.svn dirs,然後解壓到您的應用程序中。

cd /tmp/ 
svn co XXX 
cd XXX 
find . -name .svn -print0 | tar cf /tmp/XXX.tar --null -T - 
cd /to/your/app/ 
tar xf /tmp/XXX.tar 

編輯:切換find/tar命令使用NUL終結器在面對包含空格的文件名時的健壯性。原始命令是:

tar cf /tmp/XXX.tar $(find . -name .svn) 
+0

哇,我不知道$(...)語法 - 我認爲這是一個bash功能。 這似乎工作,除了一個問題:它錯過了作爲多個標記(例如名稱中有空格的那些)出現在shell上的文件/目錄。我如何修改tar ... find命令來處理這些名稱? 示例文件名: 「6 - foo的」 輸出: $焦油-cf〜/ testsvn.tar \ '$(找到-name .svn文件。)\' 焦油」 ./6:無法統計:沒有這樣的文件或目錄 tar: - ::不能stat:沒有這樣的文件或目錄 tar:the:不能stat:沒有這樣的文件或目錄 tar:foo:不能stat:沒有這樣的文件或目錄 – 2009-09-23 22:06:22

+0

對不起的評論 - 無法弄清楚如何在評論中強制換行。 – 2009-09-23 22:07:15

+0

是的,$(...)是一個bash功能。文件名空間是空的。您可能想要改爲使用諸如「find。-name .svn -print0 | tar cf /tmp/XXX.tar -T - --null」之類的東西。 -print0告訴find使用NUL分隔符而不是換行符。 -T-通知tar從stdin讀取文件名,--null通知tar使用NUL分隔符而不是換行符。 – bstpierre 2009-09-23 22:14:11

0

(5)」如果您只是對不同的目錄進行結賬,然後將額外的文件複製到該目錄中,在切換到從新目錄運行應用程序之前驗證一切正常?

+0

不幸的是,這是不是一個真正的好選擇,因爲額外的文件列表是不斷變化的該應用程序運行。 – 2009-09-23 22:02:04