救我脱离我的SVN自我

时间:2009-06-19 13:53:55

标签: svn shell

当使用svn时,我想检查整个本地存储库,我进入其目录并输入:

svn commit -m "blah blah"

我很快意识到(痛苦的方式)这不会自动添加新文件。

为了做到这一点,我正在执行这两步黑客怪物:

find . | grep -v ".svn" | grep -v "ignorepattern" | xargs svn add 2>/dev/null
svn commit -m "blah blah"

现在,我不是外壳大师,但我的代码感觉给我一个糟糕的代码味道。

任何建议都将不胜感激。

由于

6 个答案:

答案 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)

切换到Mercurial(...或者git或bazaar或者其他什么。我真的很认真。)

> hg addremove #adds files you added, removes the ones you've deleted.

...和.hgignore比一堆frigging svn ignore属性更容易管理。

SVN不是唯一的免费版本控制系统,您可能需要考虑切换。 (All the cool kids are doing it。)