Git:使用可执行文件



我有一个项目中有一个.sh文件,一旦被其他人拉取,它必须处于可执行模式。现在,我已经在本地计算机上更改了它的权限。但是,我也希望将其推送/拉取为可执行文件,以便其他用户不必一直运行chmod命令。

我已经被告知两种可能的解决方案:.gitattributesgit update-index --chmod=+x script.sh,但是鉴于我的病情,我不确定我应该遵循什么。

在这里看到了这篇文章,在那里看到了这个答案,我在想哪一个更适合我的情况。我希望这个过程自动完成,而不是每次都由用户添加。

有什么想法吗?

由于您已经用 linux 标记了这个问题,因此您只需签入文件即可。 现在您已在计算机上更改了它:

% chmod +x script.sh

Git 会注意到文件已更改:

% git status
On branch old2
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
        modified:   script.sh

你可以通过差异看到该文件实际上是可执行的:

% git diff foo.sh
diff --git a/foo.sh b/foo.sh
old mode 100644
new mode 100755

模式 100644 反映不可执行文件,模式 100755 反映可执行文件,类似于 Unix 文件权限位。 (如果除了更改权限之外还更改了文件,则还将看到更改。

当您签入此内容并且您的协作者拉取您的更改时,该文件也将对他们强制执行。


请注意,这在没有执行位概念的系统(即 Windows)上不会自动工作,在这种情况下,您需要对 update-index 执行某些操作。

请注意,这取决于您的系统是否已正确配置core.filemode。 此值应在所有非 Windows 系统上设置为 true

% git config core.filemode
true

如果由于某种原因,该命令返回false并且您使用的是非 Windows 计算机,请运行:

% git config core.filemode true

以重新启用它。

你必须决定哪个适合你。您上面给出的两种方法可以接受,并且几乎相同。

您应该知道如何授予可执行文件的工作权限。在Linux中,真正的方法是"chmod"。你也可以起诉git钩子。对于以正常方法进行,我更喜欢这个:

git add file.sh #this could be py file or something
git update-index --chmod=+x file.sh #make it executable
git commit -m "here the commit" #commit it
git push #push it

因此,如果您想以另一种方式执行此操作,则应尝试以下操作:

#!/usr/bin/bash
chmod +x file.sh

你可以运行它。但在运行它之前,您应该向脚本授予工作权限,以便向其他脚本授予工作权限:)

或者,您可以动态授予权限:

su -c 'chmod +x file.sh'

这样,您应该授予一次工作权限,然后它就会运行。

你考虑过 Git 钩子吗?

也许这可能是您的解决方案

.git/hooks/post-checkout:
#!/bin/sh
chmod +x script.sh

在这里你可以找到更多关于 Git 钩子的信息。

相关内容

  • 没有找到相关文章

最新更新