2012-04-28 70 views
1

我需要使用特定文件的名稱作爲目錄名稱,並將該文件移動到全新目錄中。將SVN重命名文件作爲目錄

我的回購看起來像現在這種權利:

file1 
file2 
dir1/ 
    dir1file1 
search 
source_code2 

,我需要得到這個:

file1 
file2 
dir1/ 
    dir1file1 
search/ 
    search_contents 
source_code2 

,我需要做的操作是:

mv search search_contents 
rm search 
mkdir search 
mv search_contents search/ 

我假設我可以這樣做:

svn move search search_contents 
svn del search 
mkdir search 
svn add search 
svn move search_contents search/ 

它有道理嗎?

svn如何處理單個文件名的多個命令? (沒有提交)或者我應該做中間提交?

+0

是的,它是有道理的。它可能會很好。是的,最好是安全的。 – Ben 2012-04-28 17:44:59

+1

我會使用中間提交來避免任何問題。在一次提交中,在同一個文件/目錄中多次移動/重命名可能會讓Subversion感到有點不安。我不確定你是否需要'svn del search',因爲'svn move search searchcontent''本質上刪除了搜索並且增加了search_contents – John 2012-04-28 17:59:35

+0

@John你是對的,這是一個不必要的步驟,謝謝指出它。 – 2012-04-30 09:00:52

回答

2

如果你嘗試這樣做,沒有犯之間的-更新,你會得到這樣的消息:

的svn:不能替換「搜索」以不同類型的節點;在 刪除必須提交併更新父增加 「搜索」

你的svn命令列表只要改變這個前:

svn move search search_contents 
svn commit -m "Renamed file" 
svn up 
mkdir search 
svn add search 
svn mv search_contents search 
svn commit -m "done" 
+0

我只是想確定一下,因爲中間提交會留下一個不一致的應用程序:(我想我只能在提交消息中說, – 2012-04-28 18:15:17

+0

是的。不幸的是,我不知道如何避免這種情況。 – 2012-04-28 18:23:29

+0

感謝Doug的回答,它的工作原理如下:)我只是在提交時留下了一個很大的警告信息:P – 2012-04-30 09:02:18

0

原來,這些步驟可以在一個完成single commit

# variant 1 
svn move search search-newname 
mkdir search 
svn add search 
svn move search-newname search/search 
svn commit -m "magic" 

# variant 2 
svn delete search 
mkdir search 
svn add search 
svn copy "^/[email protected]" search/ 
svn commit -m "more magic" 

的事情是,我不知道,我不想搞砸了回購,信用這個答案去默契上#svn陳蔭羆el on irc.freenode.net

另外,我不得不感謝danilsh和wayita提到svnmucc。 svnmucc是一個可以在列表中組合多個命令(cp,mv,rm等)的工具。