75

私は頻繁にbashスクリプトをGitリポジトリに追加しており、スクリプトには、の前のLinuxファイルシステムで実行可能権限がありますgit add。ただし、追加したファイルをリモートリポジトリにプッシュして別の場所にプルすると、ファイルは実行不可能なアクセス許可で表示されます。問題を修正するには2つの方法があるようです。

  1. chmod u+x $script 
    git commit -am "fixing the script permissions... again..."
    
  2. git update-index --chmod=+x $script
    

毎回パーミッションを修正する代わりに、Gitにスクリプトのファイルパーミッションを確認させ、git add「ねえ、これは実行可能ファイルです!」と認識する方法はありますか?実行可能権限で直接リポジトリに追加しますか?

4

6 に答える 6

40

git 2.9.X/2.10 (2016 年第 3 四半期) はそれ自体をもたらしchmodますgit add!

Edward Thomson ( )によるcommit 4e55ed3 (2016 年 5 月 31 日)を参照してください。 助けて: Johannes Schindelin ( ) . ( 2016 年 7 月 6 日コミット c8b080aJunio C Hamanoによってマージされました)ethomson
dscho
gitster

add: 追加--chmod=+x/--chmod=-xオプション

core.filemode実行可能ビットは、false に設定されたリポジトリ内のパスに対して検出されません (したがって、設定されませ) core.filemode
たとえば、シェル スクリプトを追加する Windows ユーザーは、Windows 以外のユーザーとの互換性のために実行可能ファイルとして追加することができます。

これは配管コマンド ( git update-index --add --chmod=+x foo) で実行できますが、コマンドを教えるgit-addことで、ユーザーは既に使い慣れたコマンドで実行可能ファイルを設定できるようになります

この新機能の起源は、「Windows 上の Git でファイル実行モードのアクセス許可を作成する方法」 (2011 年 2 月)で確認できます。

于 2016-07-09T19:14:19.303 に答える
8

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 
于 2014-07-11T19:13:44.057 に答える
7

ファンシーなbashスクリプトを使用しないソリューション

  1. ファイルに設定fileMode = trueします.git/config(またはgit config core.filemode true他の人が指摘したように実行します)
  2. ファイルのパーミッションの実行可能ビットを変更し、この変更をコミットします。(chmod u+x $scriptあなたが指摘したように)。これは一度だけ行う必要があります。
  3. リモートにプッシュ

次にそこからプルするとき、git はコミットされた実行可能ビットをファイルに設定します。私も同様の問題を抱えていましたが、これで解決しました。

fileMode = trueパーミッションに関して追跡できる唯一のもの、つまり実行可能ビットを追跡するように git に指示します。これは、実行可能ビットへの変更が作業ツリーの変更として git によって認識され、それらの変更が次のコミットでリポジトリに保存されることを意味します。

必要な実行可能ビットをコミットしたら、次にコミットしたくないときに git がそのような変更を気にしないように、をリセットすることもできますfileModefalse

于 2016-03-30T13:36:46.380 に答える
1

コマンドでこれを実行できるとは思いませんが、git addコマンドを実行した直後にスクリプトを実行できる可能性がありますがgit commit、コミットが実際に作成される前です。

pre-commit フックを見てください。

http://git-scm.com/book/en/Customizing-Git-Git-Hooks

基本的には、.git/hooks/ フォルダーに pre-commit というファイルを作成するだけです。(フック フォルダーに既にサンプルがあるはずです。名前を変更して、末尾の「.sample」を削除してアクティブ化します。)

落とし穴があります。git stash -q実際にステージングされたバージョンのファイルで作業できるように、スクリプトが最初に実行されることを確認してください。

于 2013-04-01T05:18:56.147 に答える