假设您在subversion控件下有一个目录,其中包含一些文件和大量子目录,如下所示:
file1.txt
file2.txt
file3.txt
dir1/
dir2/
dir3/
dir4/
:
dirXX/
Run Code Online (Sandbox Code Playgroud)
现在你需要文件和一些目录,但不是全部.这可以通过SVN完成.只是使结账非递归:
svn checkout -N <URL>
Run Code Online (Sandbox Code Playgroud)
这只检出第一个目录和里面的文件.没有包含子目录.即使你进入checkout目录并运行" svn up",它只会更新之前检出的文件,它不会添加目录.您现在可以通过显式更新这些目录来有选择地添加所需的目录.例如,如果您只需要dir2和dir4,则可以进入结帐目录并执行
svn up dir2
svn up dir4
Run Code Online (Sandbox Code Playgroud)
如果您svn up将来运行通用" ",它将只更新文件和那两个目录,它不会添加任何其他目录.
现在的问题是:如果我以后再决定我不再需要dir2怎么办?我怎么摆脱它?似乎没有办法这样做,除了删除整个结帐并从头开始.
当你刚删除dir2时,下一个" svn up"将把它带回来,因为" svn status"当然显示它现在缺失("!"在它的名字前面).运行" svn remove"当然会将其删除,但在下一次提交时,它也会将其从存储库中删除,这不会发生.
即使是SVN 1.5的新稀疏目录("浅签出")功能也没用:
Subversion 1.5的浅层检查实现很好,但不支持一些有趣的行为.首先,您无法取消望远镜查看工作副本项目.在无限深度工作副本中运行svn update --set-depth empty将不会丢弃除最顶层目录之外的所有内容 - 它只会出错.
- http://svnbook.red-bean.com/en/1.5/svn.advanced.sparsedirs.html
这对SVN来说完全不可能吗?有没有人想出一个聪明的工作?
只需创建checkout目录(没有SVN),然后直接从存储库中检出单个子目录作为该目录的子目录将适用于目录:现在每个目录都是自己的结帐,可以更新,一旦不再需要,你可以删除它.但是,我如何获取文件(例如file1.txt)?SVN不允许签出单个文件,只能签出整个目录.
有没有办法可以忽略我本地工作副本中的文件而不污染svn属性?我不希望我的本地忽略模式(例如临时文件)被发布到存储库并导致repo有很多无用的信息.
就像在git中一样,我可以使用.git/info/exclude.SVN中有类似的方法吗?
我有一个Subversion工作副本,我对一个文件进行了一些本地修改.修改只与我有关,我不想提交它们.(存储库中的版本包含一些适合其他用户的默认值,但不适合我,这就是我想在本地覆盖它们的原因.)
请注意,虽然我不想提交更改,但我确实希望在我这样做时收到存储库中所做的任何更新svn update.此外,只有在我的工作副本中,我不想将更改提交到该文件,其他用户不应受到影响.所以svn:ignore或者提交钩子不符合我的目的.
目前,我只是这样做:
svn commit file1 file2...
Run Code Online (Sandbox Code Playgroud)
我明确指定了包含我不想提交的特定文件的更改的文件.
然而,在我工作的时候,我养成了简单写作的习惯:
svn commit -m "Log of what I just did"
Run Code Online (Sandbox Code Playgroud)
而且我担心在我不专心的时候,我会无意中使用上面的命令提交"禁止"文件.
简而言之,我正在寻找的只是一种在工作副本中"标记"文件的方法,该方法可以防止Subversion提交该文件中的更改(即使我刚刚得到一个,也不必自动排除当我尝试提交所有文件时出错,很好).有点像标记处于"冲突"状态的文件......
这样的事情存在吗?
更新:akent,谢谢你指出这个非常相似的问题.
我有一个SVN工作副本(由TortoiseSVN管理).在该工作副本中,我使用git进行本地版本控制和分支.当然,我想为svn隐藏.git目录和.gitignore文件.
但是,忽略它们意味着将属性添加到不再是本地的存储库.我不希望这(因为许多人共享这个回购)因为它很烦人,因为建议在每次提交回购时提交.
我发现(通过那个问题)ignore-on-commit列表的可能性.但是(至少在TortoiseSVN中)它只适用于文件:如果我检查修改,则repo会显示修改后的属性.但是,由于上下文菜单条目没有显示,我无法将其添加到ignore-on-commit.
那么,有没有办法(f.ex. by commandline?)将repo添加到ignore-on-commit中?
还有其他方法可以隐藏/忽略svn的.git和.gitignore吗?
我在一个存储库中有一个项目.人们很快就会开始检查,研究它,然后再做出改变.但是在该项目中有一个文件(我自己设计的精心配置文件),每个人都必须有一份副本,但是他们会对它进行更改,这些更改永远不应该被检入(这是永远不应该被发送的)通过更新回到存储库).
所以,我希望签出项目的每个用户都能收到这个配置文件,但是我希望在所有提交中都忽略它.
到目前为止我所读到的内容让我觉得这是不可能的.看来,一旦我用这个配置文件导入项目,它就处于版本控制之下,除了删除它之外,再也没有办法忽略它.
我希望我只是误解了,解决方案很简单.
有人可以帮忙吗?
哦,如果可能的话,我需要一个命令行解决方案.很多工作都是在没有ssh连接的无头linux机器上完成的.
谢谢!
编辑:我去了cdhowie的答案.除了按照他的建议创建模板配置文件(例如app.config.template)之外,我还使用"svn propedit svn:ignore"来在提交时忽略真正的配置文件名(例如app.config).
在某些情况下,作为开发环境设置的一部分,某些文件使用默认设置进行分发,并将这些文件签入svn.但我们不希望用户意外地对这些文件进行本地修改.
在svn中有可能做到这一点吗?我知道svn:ignore对已经签入的文件不起作用.或者是否有不同的实践来实现相同的结果?
我刚刚在SVN中创建了一个提交时忽略的更改列表:有没有办法将文件标记为"不提交"?并且它在命令行上非常棒,使得在命令行中查看我关心的更改变得更加容易.
拥有所有这些功能和组织现在我在eclipse中选择我的所有项目并转到Team> Commit,并且在提交对话框中没有更改列表的概念,我仍然需要完成所有更改并且繁琐地选择要提交的文件.
我是否遗漏了Eclipse的Subversive中允许我在提交对话框中使用更改列表的内容?
我找到了以下设置,但它似乎没有改变任何东西......

我有一个本地更改的文件,永远不应该同步回存储库,因为它只适用于我的本地安装.但是如果在repo中更改了相同的文件,我希望这些更改能够更新我的本地副本.
目前,当我想要签入我的更改时,相关文件始终显示在更改列表中,我必须手动将其从签入中排除.我如何制作它以便我可以更新,并具有上述限制?
谢谢 :)
我一直试图忽略特定的文件和目录,以防止将本地修改提交到存储库。
我遇到的问题是,一旦文件一直致力于存储库,你不能再忽视它。
svn propset svn:ignore '*' ./stuff
Run Code Online (Sandbox Code Playgroud)
如果 ./stuff 文件夹中的文件已经被添加和提交,它们不会在以后的提交中被忽略。我发现我经常想在项目开始时忽略特定文件,但不能,因为这些目录不是工作副本,所以我正在做
svn add *
svn revert fileIWantToIgnore.ext
svn propset svn:ignore 'fileIWantToIgnore.ext' .
Run Code Online (Sandbox Code Playgroud)
这是一个有点费力的过程。你有什么建议?