使用TortoiseSVN,我可以将文件移动到ignore-on-commit更改列表中,这样当我提交整个树时,对该文件的更改不会被提交.
有没有办法使用svn命令行工具做这样的事情?
编辑:感谢您使用的建议svn:ignore
,但这并不是我想要的.
svn:ignore
影响和svn add
&之类的事情svn import
.它给出了一个要忽略的文件名模式列表.
我有一个已经在源代码控制下的文件,但我想对我提交整个源代码树后不想提交的文件进行临时更改.我正在进行许多其他更改,我可以在我的监视器上粘贴一个注释,告诉我在提交树之前恢复该文件,但如果svn可以自动跳过该文件,那将会很好.
正如OP所述,TortoiseSVN有一个内置的变更列表,"ignore-on-commit",它自动被排除在提交之外.命令行客户端没有这个,所以你需要使用多个更改列表来完成同样的行为(有警告):
一个你想要工作的工作[工作]
一个你想忽略的东西[ignore-on-commit]
由于有TortoiseSVN的先例,我在我的例子中使用"ignore-on-commit"来获取我不想提交的文件.我会对我的文件使用"work",但你可以选择你想要的任何名字.
首先,将所有文件添加到名为"work"的更改列表中.必须从工作副本的根目录运行:
svn cl work . -R
这将以递归方式将工作副本中的所有文件添加到名为"work"的更改列表中.这样做有一个缺点 - 随着新文件被添加到工作副本中,您需要专门添加新文件,否则它们将不会包含在内.其次,如果你必须再次运行它,那么你需要再次重新添加所有"ignore-on-commit"文件.不理想 - 您可以像其他人一样开始在文件中维护自己的"忽略"列表.
然后,对于要排除的文件:
svn cl ignore-on-commit path\to\file-to-ignore
因为文件只能在一个更改列表中,所以在上一次"工作"添加之后运行此添加将从"工作"更改列表中删除要忽略的文件,并将其放在"ignore-on-commit"更改列表中.
当您准备好提交您希望提交的已修改文件时,您只需在提交中添加"--cl work":
svn commit --cl work -m "message"
这是我的机器上的一个简单示例:
D:\workspace\trunk>svn cl work . -R Skipped '.' Skipped 'src' Skipped 'src\conf' A [work] src\conf\db.properties Skipped 'src\java' Skipped 'src\java\com' Skipped 'src\java\com\corp' Skipped 'src\java\com\corp\sample' A [work] src\java\com\corp\sample\Main.java Skipped 'src\java\com\corp\sample\controller' A [work] src\java\com\corp\sample\controller\Controller.java Skipped 'src\java\com\corp\sample\model' A [work] src\java\com\corp\sample\model\Model.java Skipped 'src\java\com\corp\sample\view' A [work] src\java\com\corp\sample\view\View.java Skipped 'src\resource' A [work] src\resource\icon.ico Skipped 'src\test' D:\workspace\trunk>svn cl ignore-on-commit src\conf\db.properties D [work] src\conf\db.properties A [ignore-on-commit] src\conf\db.properties D:\workspace\trunk>svn status --- Changelist 'work': src\java\com\corp\sample\Main.java src\java\com\corp\sample\controller\Controller.java src\java\com\corp\sample\model\Model.java M src\java\com\corp\sample\view\View.java src\resource\icon.ico --- Changelist 'ignore-on-commit': M src\conf\db.properties D:\workspace\trunk>svn commit --cl work -m "fixed refresh issue" Sending src\java\com\corp\sample\view\View.java Transmitting file data .done Committing transaction... Committed revision 9.
另一种方法是简单地将您希望提交的每个文件添加到"工作"更改列表中,甚至不维护忽略列表,但这也是很多工作.实际上,唯一简单,理想的解决方案是在SVN本身实现这一点.在Subversion问题跟踪器SVN-2858中存在一个长期存在的问题,如果这种情况在未来发生变化.
我一直发现自己在这种情况下也:和修改列表不为我工作-我想使文件的短名单,我不希望犯,而不是维护我的文件列表大规模不要想提交!
我在linux命令行上工作:所以我的解决方案是创建一个脚本/ usr/bin/svnn(是的,有两个'n!),如下所示:
#! /bin/bash DIR=/home/mike/dev/trunk IGNORE_FILES="\ foo/pom.xml \ foo/src/gwt/App.gwt.xml \ foo/src/main/java/gwt/Common.gwt.xml \ foo/src/main/resources/context/datasource/local.xml \ foo/src/main/resources/context/environment/local.xml" for i in $IGNORE_FILES; do mv $DIR/$i $DIR/"$i"_; done; svn "$@" for i in $IGNORE_FILES; do mv $DIR/"$i"_ $DIR/$i; done;
显然,这是根据我的情况量身定制的 - 但只需更改DIR和IGNORE_FILES以适合您的开发设置.记得将脚本更改为可执行文件:
sudo chmod +x /usr/bin/svnn
..then你刚才用的,而不是"SVN","svnn"不必担心在本地更改IGNORE_FILES列表中的文件检查的运行颠覆.我希望这有帮助!
我不相信有一种方法可以忽略存储库中的文件.我们经常使用web.config和其他配置文件来解决这个问题.
虽然不完美,但我经常看到和使用的解决方案是使用.default文件和创建本地副本的非任务.
例如,repo是一个名为web.config.default
默认值的文件.然后创建一个nant任务,将所有web.config.default
文件重命名为web.config
可以自定义为本地值的文件.检索新的工作副本或运行构建时,应调用此任务.
您还需要忽略web.config
创建的文件,以便它不会提交到存储库.
查看更改列表,它可以为您提供筛选已更改但不想提交的文件的选项.SVN不会自动跳过文件,除非你告诉它 - 以及你告诉它该文件与其他文件有某种不同的方式是将它放在更改列表中.
它确实需要你做更多的工作,你只能将更改列表应用到你的工作副本(显然,如果你可以将'永不更新'属性应用于修订版,可以想象可能发生的混乱!).