2009-02-03 108 views
13

這不是我不認爲的標準svn忽略問題。如何保持SVN無法更新存儲庫中已有的目錄

我有一個倉庫,裏面有一個巨大的目錄,我不想要。因爲其他人使用庫,我不能從樹中刪除它。但是,我不想每次執行svn時重新下載此目錄。我可以理解忽略會阻止我上傳到svn的目錄,但我怎麼告訴svn我不希望它重新下載已存在於存儲庫中的特定目錄。

我做什麼...

svn up 
rm badDirectory 

並且將來SVN起來的重新下載。我想阻止這一點。

謝謝!

編輯:好的。我希望SVN有一個內置的選項,我還沒有注意到。我希望避免不得不針對顛覆的不足之處進行「破解」,但下面的選項似乎是可以接受的選擇。再次

編輯以解決意見夫婦:

是否有特別的原因,你 不能退房該文件夾,並保持 呢?沒有磁盤空間(可能不是因爲 你可以檢出它)?安全 的原因是什麼?

我可以檢出文件夾。整個svn存儲庫大約是291 megs ..其中有290個是在這個「不好」的目錄中。基本上,其他一些控制着存儲庫的人(因此決定在那裏發生什麼)將一個目錄放在那裏,那裏真的不需要在那裏。我不是說這是一個關於政策的問題,也不是說「正確的」使用svn的方法。我只是想知道是否有技術解決方案。

您可以更好地描述存儲庫的樹結構 嗎? 與 不良目錄或僅有其他 目錄存在同一級別的文件嗎? -

基本結構:

repository root 
- good dir 1 
    - plenty of subdirs in all of these directories 
- good dir 2 
- good dir X 
- bad dir 1 
- bad dir 2 
- bad dir X 
- good file 1 
- good file 2 
- good file X 
+0

是否有特殊原因導致您無法檢出該文件夾並保留該文件夾?沒有磁盤空間(可能沒有,因爲你可以檢出它)?安全原因? – Max 2009-02-03 17:48:45

+0

您可以更好地描述存儲庫的樹結構嗎?是否存在與壞目錄相同級別的文件,或只有其他目錄? – 2009-02-03 17:48:49

+0

不完全是您的問題的答案,但是,您是否能夠更改您的版本控制系統?例如,Git可以讓你刪除項目,爲你自己創建一個本地分支,並從中刪除那個有問題的文件夾。該分支的未來更新不會涉及您在本地刪除的內容。 – Miquel 2011-02-25 08:13:57

回答

-2

所以我只想出了我認爲是對這個問題的最快答案。由於SVN沒有辦法autoignore,我不想更新目錄...

這裏是我現有的目錄結構:

根 - > goodDir 1 - > goodDir 2 等

我從結帳中刪除了錯誤的目錄。我無法從根目錄執行'svn',因爲它會嘗試重新檢查錯誤的目錄。

但是,下面的命令工作得很好:

ls | xargs svn up 

短,甜,簡單,易記。

+1

那會不會把新文件拉到當前目錄下呢? 如果有人向頂層目錄添加新的文件/文件夾,則會錯過。 – 2009-02-19 15:40:51

4

你可以使用腳本來更新SVN --non遞歸當前目錄,然後單獨recurvively更新剩餘的子目錄。使用bash腳本,你可以遍歷所有的子目錄,並跳過違規的腳本。

事情是這樣的:

#!/bin/bash 

BADDIR="bad" 
FILELIST="*" 

svn update --non-recursive 

for file in $FILELIST 
do 
if [ -d $file ] 
then 
    if [ $file != $BADDIR ] 
    then 
    svn update $file 
    fi 
fi 
done 
3

如果重命名損壞文件夾目錄.svn目錄,然後運行更新,SVN將跳過目錄,並說已被刪除,即使它仍然存在。

當您想要提交時,至少在包含壞目錄的較高級別上,您需要將其還原。

0

您可以指定--non遞歸或-N從讓所有的子目錄

壓制它和明確地做你想要的那些更新。

一小批文件,將使它容易repeatble

\ 0

0

如果它不是一天你(或你的小組)的日常工作必需的文件夾,你可以要求管理員更新SVN層次結構將該文件夾移動到與您必須更新的文件夾相同的級別(或更高)。

例如

projet - non-essential folder 
     \ essential folder

,你將只需要更新(退房)「基本文件夾」等人也將 必須更新(退房)的「非必要的文件夾」。

10

你可以做一個sparse checkout

svn co url/to/repo mywc --depth=files 

,將讓你只在它的文件,沒有子文件夾的廁所。 現在你可以得到你想要的所有文件夾已提供

svn up url/to/repo/subfolder1 --set-depth infinity 
svn up url/to/repo/subfolder2 --set-depth infinity 
svn up url/to/repo/subfolder3 --set-depth infinity 
... 
+4

太棒了,正是我想要的。此外,它可以從Tortoise SVN上對不需要的文件夾執行「更新到修訂」並將深度設置爲「僅此項」或「排除」。 – 2012-02-10 11:03:21

0

解決方案,我會說,需要忽略定期庫的一部分是壞的倉庫結構的一個明顯標誌。嘗試找到一種方法將其移動到存儲庫內的不同位置或類似的地方。

0

柯比的解決方案是乾淨的,只是它不更新當前目錄。

如果你有這樣的結構:

root - 
    |-subdir1 
    |-subdir2 
    |-fileA 
    |-fileB 

Kirby的解決方案將不會更新的fileA,FILEB和以後添加到根目錄的任何其他文件。

你會想添加一個「svn up -N」。你可以用一個別名和分號做到這一點:(這是bash的別名語法如果您使用的是不同的外殼,改變如需要)

alias myup='ls | args svn up; svn up -N' 

18

我有類似的稀疏結賬路線去斯特凡提到的。不同的是我排除了整個目錄。

下面是我做的排除整個目錄及其所有子目錄。注意:不需要的目錄已經在我的磁盤上,所以我先刪除它。

$ rm -rf unwanted-directory
$ svn checkout url/to/repo/unwanted-directory unwanted-directory --depth empty
$ cd root/of/my/tree
$ svn update
< - 不想要的目錄不會從倉庫

作爲參考收購,我們有一個「原型」在我們樹了一堆實驗代碼目錄。由於我不在這個領域工作,我沒有興趣讓1G在我的多個開發樹中獲得源代碼。

0

使用以下命令

find -maxdepth 1 ! -name . ! -name .svn ! -name badDirectory -exec svn up {} \; 

保留所有附加-exec喜歡之前的目錄! -name目錄名

find -maxdepth 1 ! -name . ! -name .svn ! -name badDirectory ! -name badDirectory2 ! -name badDirectory3 -exec svn up {} \; 
0

雖然考慮特定供應商的解決方案,在TortoiseSVN,你可以通過下面的manual page描述的過程中,部分「結帳深度」內上市後實現它。

如果檢查出稀疏的工作副本(即,通過選擇不是完全遞歸的結帳深度其他的東西),你可以在以後使用版本庫瀏覽器(稱爲「資源庫中的部分獲取額外的子文件夾瀏覽器「)或檢查修改對話框(」本地和遠程狀態「部分)。

在Windows資源管理器中,右鍵單擊已簽出的文件夾,然後使用TortoiseSVN→Repo-Browser調出資源庫瀏覽器。找到您想添加到您的工作副本,然後使用右鍵菜單→更新項目至版本....

但子文件夾:我想補充一點,我會改變最後一步。不要從工作副本中找到要添加(或刪除)的子文件夾,請右鍵單擊根文件夾,選擇「將項目更新爲修訂...」,在工作深度上點擊「選擇項目」按鈕,並選擇打開的文件管理器上的所有孩子。

1

更新除了一些不好的目錄中的所有當前的位置數據:

svn up `svn ls | grep -v badDirectory` 
0

我看到有人問相當長的一段時間回來,但如果你仍然有興趣,我偶然發現了一個不錯的博客,解釋不同的方式使用「SVN:忽略」

這裏是鏈接:http://superchlorine.com/2013/08/getting-svn-to-ignore-files-and-directories/

由於在博客中解釋說,你很可能在一個文件中創建「壞文件夾」的列表,並使用「使用svn propset命令的svn:忽略-RF bad_folder_list_file「

希望有所幫助!

相關問題