截至2016年2月(版本1.9),Subversion没有内置的“不提交” /“忽略提交”功能。此答案是不理想的命令行解决方法
如OP所述,TortoiseSVN具有内置的更改列表“提交时忽略”,该更改列表自动从提交中排除。命令行客户端没有此功能,因此您需要使用多个变更列表来实现相同的行为(带有警告):
- 一个您想提交的工作[工作]
- 一种用于您想忽略的东西[提交时忽略]
由于存在TortoiseSVN的先例,因此在示例中,我对不想提交的文件使用“提交时忽略”。我将在工作文件中使用“工作”,但您可以选择所需的任何名称。
首先,将所有文件添加到名为“ 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对此有一个长期存在的问题,以防将来发生变化。