git 中的 "svn propget svn:executable" 相当于什么?
What is the equivalent to "svn propget svn:executable" in git?
我们想将我们的版本控制从 svn 移动到 git。一切都很简单,除了一小部分。
在我们的发布过程中,我们进行了冒烟测试,以确保任何 shell 脚本在磁盘和存储库中都设置了可执行标志。
在 svn 中这很容易。我们只需要检查包装函数返回的列表。
function vc_has_executable_flag() {
svn propget svn:executable $* | awk '{ print }'
}
即使经过扩展搜索,我也没有找到任何 git 解决方案。
下面的函数returns结果相同
function vc_has_executable_flag() {
git update-index --chmod=-x $*
git reset $* | awk '{ print }'
}
问题是,有没有更好的方法来做。如果不是,这种方法是否稳定?
当然我们可以在这里有竞争条件,但由于它的预期用途是在专用构建机器上,这对我们来说不是问题。
正如你所说,正确的做法是git update-index --chmod=-x
。
另一种选择是捕获在 git 挂钩中提交的文件,然后执行此命令。但它将具有与您刚刚创建的函数相同的效果。
还要确保 git 将跟踪文件模式更改 git config core.filemode true
git ls-tree
显示文件模式。对于可执行文件,它应该是 100755
。
因此,使用简单的 grep,您可以检查 git 中的文件是否可执行。
检查函数如下所示:
function vc_has_executable_flag() {
git ls-tree HEAD $* | grep '^100755 ' | awk '{ print }'
}
我们想将我们的版本控制从 svn 移动到 git。一切都很简单,除了一小部分。
在我们的发布过程中,我们进行了冒烟测试,以确保任何 shell 脚本在磁盘和存储库中都设置了可执行标志。
在 svn 中这很容易。我们只需要检查包装函数返回的列表。
function vc_has_executable_flag() {
svn propget svn:executable $* | awk '{ print }'
}
即使经过扩展搜索,我也没有找到任何 git 解决方案。
下面的函数returns结果相同
function vc_has_executable_flag() {
git update-index --chmod=-x $*
git reset $* | awk '{ print }'
}
问题是,有没有更好的方法来做。如果不是,这种方法是否稳定?
当然我们可以在这里有竞争条件,但由于它的预期用途是在专用构建机器上,这对我们来说不是问题。
正如你所说,正确的做法是git update-index --chmod=-x
。
另一种选择是捕获在 git 挂钩中提交的文件,然后执行此命令。但它将具有与您刚刚创建的函数相同的效果。
还要确保 git 将跟踪文件模式更改 git config core.filemode true
git ls-tree
显示文件模式。对于可执行文件,它应该是 100755
。
因此,使用简单的 grep,您可以检查 git 中的文件是否可执行。
检查函数如下所示:
function vc_has_executable_flag() {
git ls-tree HEAD $* | grep '^100755 ' | awk '{ print }'
}