I frequently add bash scripts to my Git repository, and the scripts have executable permissions in the Linux filesystem prior to the git add
. But after pushing the added files to a remote repository and pulling in another location, the files show up with non-executable permissions. There seem to be two ways to correct the problem:
chmod u+x $script
git commit -am "fixing the script permissions... again..."
git update-index --chmod=+x $script
Instead of fixing up the permissions every time, is there a way to have Git simply look at the file permissions on the script during git add
, recognize "Hey, this here is an executable file!" and add it to the repository with the executable permissions directly?
There are several ways to do that.
Git aliases
You can always use bash within your git alias.
Open your git config:
vim ~/.gitconfig
Add an aliases section to it (if one does not exist):
[alias]
addscr = !sh -c 'if [[ ${0: -3} == ".sh" ]]; then git update-index --chmod=+x $0; git add $0'
Bash aliases
Edit your bash profile file:
vim ~/.bashrc
Add this at the end of the file:
function gitadd(){
if [[ ${1: -3} == ".sh" ]]
then git update-index --chmod=+x $1
fi
git add $1
}
alias gitadd='gitadd'
Combine git and bash aliases
Edit your bash profile file:
vim ~/.bashrc
Add this to the end of the file:
function checkShellFile(){
return ${1: -3} == ".sh"
}
alias gitadd='checkShellFile ? git addsrcipt "$1" : && git add "$1"'
Edit your git config file:
vim ~/.gitconfig
Add an aliases section to it (if one does not exist):
[alias]
addscript = !sh -c 'git update-index --chmod=+x $0 && git add $0'
None of the above has been tested