截至2016年2月/版本1.9,Subversion没有内置的“不提交”/“提交时忽略”的功能。这个答案是一个非理想的命令行解决方法。
正如OP所述,TortoiseSVN有一个内置的更改列表,“ignore-on-commit”,它会自动从提交中排除。由于命令行客户端没有这个功能,因此您需要使用多个更改列表来实现相同的行为(带有警告):
- 一个用于您想要提交的工作[work]
- 一个用于您想要忽略的内容[ignore-on-commit]
由于TortoiseSVN已经有了先例,我在我的示例中使用“ignore-on-commit”表示我不想提交的文件。我将使用“work”表示我想要提交的文件,但您可以选择任何名称。
首先,将所有文件添加到名为“work”的更改列表中。这必须从您的工作副本的根目录运行:
svn cl work . -R
这将递归地添加工作副本中的所有文件到名为“work”的更改列表中。这种方法有一个缺点-随着新文件被添加到工作副本中,您需要明确地添加新文件,否则它们将不会被包括在内。其次,如果您需要再次运行此操作,则需要重新添加所有“忽略提交”的文件。这并不理想-您可以像其他人一样开始维护自己的“忽略”列表文件。
然后,对于要排除的文件:
svn cl ignore-on-commit path\to\file-to-ignore
由于文件只能在一个变更列表中,因此在您之前的“工作”添加后运行此添加操作将从“工作”变更列表中删除要忽略的文件,并将其放入“提交时忽略”变更列表。
当您准备提交您希望提交的修改文件时,您只需在提交命令中添加“--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,如果将来发生更改,则会进行更新。