私は頻繁にgitリポジトリにbashスクリプトを追加しますが、スクリプトにはgit add
の前にLinuxファイルシステムで実行権限があります。ただし、追加されたファイルをリモートリポジトリにプッシュし、別の場所にプルすると、ファイルは実行不可能な権限で表示されます。問題を修正するには2つの方法があるようです。
1. chmod u+x $script
git commit -am "fixing the script permissions... again..."
または
2. git update-index --chmod=+x $script
毎回アクセス許可を修正する代わりに、git add
中にgitにスクリプトのファイルアクセス許可を単純に見てもらい、「こっち、これは実行可能ファイルです!」実行可能な権限でリポジトリに直接追加しますか?
それにはいくつかの方法があります。
Gitエイリアス
Gitエイリアス内で常にbashを使用できます。
Git configを開きます:
vim ~/.gitconfig
エイリアスセクションを追加します(存在しない場合):
[alias]
addscr = !sh -c 'if [[ ${0: -3} == ".sh" ]]; then git update-index --chmod=+x $0; git add $0'
バッシュエイリアス
Bashプロファイルファイルを編集します。
vim ~/.bashrc
これをファイルの最後に追加します。
function gitadd(){
if [[ ${1: -3} == ".sh" ]]
then git update-index --chmod=+x $1
fi
git add $1
}
alias gitadd='gitadd'
gitとbashのエイリアスを組み合わせる
Bashプロファイルファイルを編集します。
vim ~/.bashrc
これをファイルの最後に追加します。
function checkShellFile(){
return ${1: -3} == ".sh"
}
alias gitadd='checkShellFile ? git addsrcipt "$1" : && git add "$1"'
Git configファイルを編集します。
vim ~/.gitconfig
エイリアスセクションを追加します(存在しない場合):
[alias]
addscript = !sh -c 'git update-index --chmod=+x $0 && git add $0'
上記のいずれもテストされていません
git 2.9.X/2.10(2016年第3四半期)は、chmod
をgit add
自体にもたらします!
commit 4e55ed (2016年5月31日) Edward Thomson(ethomson
) を参照してください。
サポート: ヨハネスシンデリン(dscho
) 。
( J浜野邦夫-gitster
- in commit c8b080a 、06 Jul 2016)に合併)
add
:--chmod=+x
/--chmod=-x
オプションを追加
core.filemode
がfalseに設定されているリポジトリ内のパスでは、実行可能ビットは検出されません(したがって、設定されません)。ただし、ユーザーはdoにはcore.filemode
機能があります。
たとえば、シェルスクリプトを追加するWindowsユーザーは、Windows以外のユーザーとの互換性のために、それらを実行可能ファイルとして追加することができます。これは配管コマンド(
git update-index --add --chmod=+x foo
)で行うことができますが、git-add
コマンドを教えることにより、ユーザーは既に使い慣れたコマンドで実行可能ファイルを設定できますwith。
この新機能の起源は、「 WindowsのGitでファイル実行モードの権限を作成する方法 (2011年2月)」で確認できます。
「git update-index --chmod + x」を実行可能ファイルに自動的に適用するスクリプトを次に示します。
for f in `find . -name '*.sh' -o -regex './s?bin/[^/]+' -o -regex './usr/sbin/[^/]+' -o -regex './usr/lib/[^/]+' `;do
( cd `dirname $f` && git update-index --chmod=+x `basename $f` )
done
派手なbashスクリプトを使用しないソリューション:
fileMode = true
ファイルに.git/config
を設定します(または他の人が指摘したようにgit config core.filemode true
を実行します)chmod u+x $script
指摘したとおり)。これは一度だけ行う必要があります。次にそこからプルするとき、gitはコミットされた実行可能ビットをファイルに設定します。私も同様の問題を抱えていましたが、これで解決しました。
fileMode = true
はgitに、許可される許可に関する唯一のもの、つまり実行可能ビットを追跡するよう指示します。これは、実行可能ビットへの変更が作業ツリーの変更としてgitによって認識され、それらの変更が次回のコミットでリポジトリに保存されることを意味します。
目的の実行可能ビットをコミットしたら、fileMode
をfalse
にリセットすることもできます。これにより、次回コミットしたくないときにgitがそのような変更に煩わされることがなくなります。
これはgit add
コマンドで実行できるとは思いませんが、git commit
コマンドを実行した直後に、コミットが実際に作成される前にスクリプトを実行できる場合があります。
Pre-commitフックを見てください。
http://git-scm.com/book/en/Customizing-Git-Git-Hooks
基本的には、pre-commitというファイルを.git/hooks /フォルダーに作成するだけです。 (フックフォルダーに既にサンプルがあるはずです。サンプルの名前を変更して、末尾の「.sample」を削除してアクティブにします。)
落とし穴があります。実際にステージングされたバージョンのファイルで作業できるように、スクリプトが最初にgit stash -q
を実行することを確認してください。