2012-04-28 29 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等)的工具。