Git:使用可执行文件

Sch*_*tze 5 linux git bash executable gitattributes

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

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

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

有什么想法吗?

Edw*_*son 3

标记了此问题,因此您只需签入该文件即可。现在您已在计算机上更改了它:

% chmod +x script.sh
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

您可以通过 diff 查看该文件实际上现在是可执行的:

% git diff foo.sh
diff --git a/foo.sh b/foo.sh
old mode 100644
new mode 100755
Run Code Online (Sandbox Code Playgroud)

mode100644反映的是不可执行文件,mode100755反映的是可执行文件,类似于Unix文件权限位。(如果您除了更改权限之外还更改了文件,您还会看到更改。)

当您签入此文件并且您的协作者拉取您的更改时,该文件也将成为他们的可执行文件。


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

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

% git config core.filemode
true
Run Code Online (Sandbox Code Playgroud)

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

% git config core.filemode true
Run Code Online (Sandbox Code Playgroud)

重新启用它。