什么是" svn propget svn:executable"在git?

时间:2015-02-10 13:49:17

标签: git svn executable

我们希望将我们的版本控制从svn移动到git。一切都很简单,只有一小部分。

在我们的发布过程中,我们进行了冒烟测试,以确保任何shell脚本的可执行标志都设置在磁盘上和存储库中。

在svn这很容易。我们只需要检查包装函数返回的列表。

function vc_has_executable_flag() {
    svn propget svn:executable $* | awk '{ print $1 }'
}

即使经过长时间的搜索,我也没有找到任何git解决方案。

以下函数返回相同的结果。

function vc_has_executable_flag() {
    git update-index --chmod=-x $*
    git reset $* | awk '{ print $2 }'
}

问题是,如果有更好的方法可以做到这一点。如果没有,这种方法是否稳定?

当然我们可以在这里遇到竞争条件,但由于其预期用途是在专用的构建机器上,这对我们来说不是问题。

2 个答案:

答案 0 :(得分:1)

git ls-tree显示文件模式。对于可执行文件,它应该是100755。 因此,使用简单的grep,您可以检查git中的文件是否可执行。

检查功能如下所示:

function vc_has_executable_flag() {
    git ls-tree HEAD $* | grep '^100755 ' | awk '{ print $4 }'
}

答案 1 :(得分:0)

正如您所说,正确的做法是 git update-index --chmod=-x

另一种选择是捕获在git hook中提交的文件,然后执行此命令。但它与你刚刚创建的函数具有相同的效果。

还要确保git会跟踪文件模式更改 git config core.filemode true