我经常在我的Git仓库中添加bash脚本,这些脚本在git add
之前的Linux文件系统中具有可执行权限。但是在将添加的文件推送到远程仓库并拉入另一个位置后,这些文件显示为不可执行权限。似乎有两种方法可以纠正这个问题:
1.
chmod u+x $script
git commit -am "fixing the script permissions... again..."
git update-index --chmod=+x $script
有没有一种方法可以让Git在git add
期间查看脚本上的文件权限,识别“Hey,this here is an executable file!”并直接将其添加到具有可执行权限的存储库中,而不是每次都修改权限?
7条答案
按热度按时间b4lqfgs41#
git 2.9.X/2.10(Q3 2016)将
chmod
引入git add
本身!参见commit 4e55ed3(2016年5月31日)Edward Thomson (
ethomson
)。求助人:Johannes Schindelin (
dscho
)。(由Junio C Hamano --
gitster
--合并于commit c8b080a,2016年7月6日)add
:添加--chmod=+x
/--chmod=-x
选项对于
core.filemode
设置为false的存储库中的路径,可执行位将不会被检测到(因此不会被设置),尽管用户可能仍然希望将文件添加为可执行文件,以便与其他 * 有 *core.filemode
功能的用户兼容。例如,添加shell脚本的Windows用户可能希望将它们添加为可执行文件,以便与非Windows用户兼容。
虽然这可以通过plumbing命令(
git update-index --add --chmod=+x foo
)完成,但教授git-add
命令允许用户使用他们已经熟悉的命令设置文件可执行文件。你可以在“How to create file execute mode permissions in Git on Windows?”(2011年2月)中看到这个新特性的起源。
zvms9eto2#
有几种方法可以做到这一点。
1.或者甚至将bash和git别名结合起来
*Git别名
你可以在你的git别名中使用bash。
vim ~/.gitconfig
*Bash别名
vim ~/.bashrc
*合并git和bash别名
vim ~/.bashrc
vim ~/.gitconfig
以上均未测试
h5qlskok3#
下面是一个自动将
git update-index --chmod+x
应用于可执行文件的脚本:h7wcgrx34#
不需要花哨的bash脚本:
1.在您的
.git/config
文件中设置fileMode = true
(或者像其他人指出的那样运行git config core.filemode true
)1.更改文件权限上的可执行位并提交此更改。(如您所指出的
chmod u+x $script
)。您只需执行一次。1.推到遥控器
下一次你从那里拉取的时候,git会在文件上设置提交的可执行位。我也有类似的问题,这个解决了他们。
fileMode = true
告诉git跟踪它唯一可以跟踪的权限:可执行位。这意味着对可执行位的更改将被git识别为工作树中的更改,并且这些更改将在下次提交时存储在repo中。一旦你提交了你想要的可执行文件,你也可以将
fileMode
重置为false
,这样下次当你不想提交它们时,git就不会用这样的更改来打扰你了。pgvzfuti5#
我不认为这可以在
git add
命令上完成,但是你可以在运行git commit
命令之后,但在提交实际创建之前,运行一个脚本。看看pre-commit钩子。
http://git-scm.com/book/en/Customizing-Git-Git-Hooks
基本上,只需在.git/hooks/文件夹中创建一个名为pre-commit的文件(hooks文件夹中应该已经有示例,重命名它们以删除结尾的“.sample”以激活一个)。
这里有一个问题,确保你的脚本首先运行
git stash -q
,这样你才能处理文件的实际暂存版本。q3aa05256#
我刚刚添加了通过' Tortoise Git文件夹更新。右键单击所有文件并将执行权限复选框更新为true并提交/推送消息。Git命令行添加/提交也应该可以工作。
hwazgwia7#
如果你在windows/powershell上,只需相应地更改路径和过滤器: