我的托管服务器(linux)上有一个SVN存储库,我需要在我的Windows机器上安装本地工作(安装了togoise svn)。为了简化我的问题,dir结构如下所示:
root |--------sub1 |--------sub2 |--------sub3 ... |--------subN
在每个subX下添加其他子文件夹。假设我只想在版本控制下使用“sub1”和“sub3”的某些子子文件夹。但是在Windows上,当我使用tortoisesvn进行更改时,我仍然希望能够右键单击根文件夹,点击提交,并在任何选定文件夹中的root下任何位置进行任何更改。问题是,我认为使用忽略会非常麻烦,因为在不同的结构级别会有很多文件夹要忽略。
所以基本上,我想将整个事情置于版本控制之下,然后告诉svn“好吧,现在忽略除了X和Y之外的所有东西”。最简单的方法是什么?
谢谢, 约拿
答案 0 :(得分:4)
在Sparse Directories中查看有关Subversion Manual的信息。
这将需要一些工作,我不知道TortoiseSVN是否支持这一点,但这将做你想要的。
初次结帐时,应使用--depth=empty
选项。这将检出您的存储库,但工作目录中没有任何文件夹。然后,对于您想要的每个文件夹,您需要执行svn update --set-depth infinity
。这将更新该文件夹并保持更新。
$ svn co --depth=empty http://svn/repos/project/trunk myproj
checked out revision 123133
$ cd myproj
$ svn update --set-depth=infinity sub1
[yadda, yadda, yadda]
$ svn update --set-depth=infinity sub2
[yadda, yadda, yadda]
如果您不介意工作目录中的大量空文件夹,则可以使用immediates
代替empty
。这将检查该级别中的所有内容,但不会检查子目录中的所有内容。你会看到文件夹,但它们不会包含任何内容。然后,您可以对所需的文件夹执行svn update
。但是,如果您不使用--set-depth
,则您的子文件夹将在以后更新时出现问题。
答案 1 :(得分:0)
使用CVS(SVN的前身),有一个.cvsIgnore文件。我知道没有带SVN的.svnIgnore文件,但我知道有svn:ignore功能。尝试谷歌搜索“.svnIgnore文件”,看看是否符合您的需求。
答案 2 :(得分:0)
使用Svn,如果不添加根目录,则无法在不受版本控制的文件夹下添加内容。
svn:ignore将根据您的模式忽略文件(来自svn status
)。即。 svn propset svn:ignore "*.xml" folder/
将忽略文件夹目录下的任何xml文件(不受版本控制)。所以它对你没有帮助,因为一旦你添加一个文件并试图忽略它,任何后续的修改仍然会考虑提交。
因为togoise svn会自动添加任何创建的文件(使用gui),你必须恢复你想要排除的文件夹的修改。
希望这有帮助
答案 3 :(得分:0)
我认为没有办法忽视所有,然后不会忽略具体的。您将不得不忽略您想要忽略的那些。我用于此的命令是:
svn propset svn:ignore "sub1 sub2 sub3 ... subN" ./rootDir
您必须在svn中导入所需的目录,然后运行propset,然后提交。然后将实际忽略的目录添加到rootDir。
编辑:上述错误。它应该是:
svn propset svn:ignore -F file.txt ./rootDir
原因是,对于给予propset的多个属性,它需要将它们换行。见here。
所以,对于你上面的问题,我会这样做:
ls > file.txt
然后删除您想要版本控制的目录,然后使用该文件从上面调用svn propset。