当使用svn时,我想检查整个本地存储库,我进入其目录并输入:
svn commit -m "blah blah"
我很快意识到(痛苦的方式)这不会自动添加新文件。
为了做到这一点,我正在执行这两步黑客怪物:
find . | grep -v ".svn" | grep -v "ignorepattern" | xargs svn add 2>/dev/null
svn commit -m "blah blah"
现在,我不是外壳大师,但我的代码感觉给我一个糟糕的代码味道。
任何建议都将不胜感激。
由于
答案 0 :(得分:18)
好的,这不是问题的直接答案,但我不得不说这确实是一个工作流程问题,而不是你应该尝试自动化的东西。开发目录往往会充满你在源代码控制下不需要的大量随机内容,但忘记添加到忽略文件中。这个过程很快将用垃圾填满您的存储库。
此外,创建一个新的项目资源通常是一个相当罕见的过程,应该至少要仔细考虑。必须在每个资源(或批处理,通过globbing)上执行“svn add”的步骤是我赞成的,因为它会停止临时提交。
如果你担心自己会忘记事情,那么“svn status”命令就是你的朋友。偶尔运行它以确保您跟踪所关注的所有资源。
答案 1 :(得分:17)
更容易找到要添加的文件:
svn status | grep "^\?" | awk {'print $2'}
它的好处是使用svn客户端来确定要添加的内容 - 新的,未被忽略的文件 - 因此更安全,更快。
答案 2 :(得分:6)
所以你在提交之前没有审查你的差异? Tsk,tsk。
您可以在每次提交前执行svn st
,并在第一列中使用vgrep“?”。只要你做小提交,这些就不难发现。
或者,如果它是您环境中的一个选项,则可以使用TortoiseSVN等GUI工具进行提交。在Tortoise中,无版本文件像拇指一样突出,可以在提交窗口中添加(通过右键单击并选择“添加”,或者只需选中复选框并单击“确定”)。
答案 3 :(得分:0)
find . | grep -v ".svn" | grep -v "ignorepattern" | xargs svn add
会更好地写成
find . -name .svn -prune -o ! -name '*ignorepattern*' -exec svn add {} +
这排除了“.svn
”目录,但不排除名为(例如)“foo/svn-bar
”的文件,并处理文件名中的空格。
如果您没有GNU findutils,则可能必须
find . -name .svn -prune -o ! -name '*ignorepattern*' -print0 | xargs -0 svn add
我同意其他答案和评论,质疑这个工作流程的可取性。
答案 4 :(得分:0)
我也是命令行的粉丝,我经常从命令行发出 svn status 和 svn update 等命令,但有些人在这里建议,当它到来时提交时间我真的需要更多关于我要提交的信息,而不是命令行提供的信息。当然,我可以使用 svn diff ,但这只是难以读取输出。
我建议在命令行之上使用一个不错的GUI客户端。通用的跨平台(基于Java)是例如SmartSVN。我认为,在提交更改时,GUI是可行的方法。
答案 5 :(得分:-3)