“svn propget svn:executable” 在 Git 中对应什么?

3
我们想将版本控制从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 }'
}

问题是,是否有更好的方法来完成它。如果没有,这种方法是否稳定?
当然,在这里我们可能会遇到竞态条件,但由于其预期用途是在专用构建机上使用,这对我们不是问题。

3
git ls-tree 显示文件的模式。对于可执行文件,它应该是 100755 - Alexey Ten
@AlexeyTen:为什么要作为评论?这正是我在寻找的。没有像我的解决方案那样的副作用。谢谢。 - Sebastian Bonhag
我不确定这是否是你要找的。 - Alexey Ten
我已经添加了答案。您可以使用实际函数对其进行更新。 - Alexey Ten
2个回答

1

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

检查函数如下:

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

0

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

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

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


我不想设置它,只想验证它是否已经设置。 - Sebastian Bonhag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接