2016-12-05 1 views

答えて

22

Git documentationによれば、update-indexサブコマンドを使用して、任意のシステム(たとえば、Windowsで動作します)上の任意の追跡ファイルの "実行可能"フラグを設定または削除できます。

は実際にそうではない、これは通常のUNIX許可制度のように見える場合

git update-index --chmod=-x path/to/file 

を使用し、

git update-index --chmod=+x path/to/file 

使用して実行可能フラグを削除するには、実行可能ファイルとファイルを設定します。確かに、Gitは実行可能ファイル(x)とファイルのみを設定または解除することができます。

のGit 2.9以降では、あなたがファイルをステージングして、単一のコマンドを使用してフラグを追加することができます

git add --chmod=+x path/to/file 

フードの下では、Gitはファイルごとに特別なファイルモードを維持する:通常のファイルに対しては100644を、ため100755実行可能なもの。あなたは--stageオプションで、ls-fileサブコマンドを使用してこれらのモードを可視化することができます:

$ git ls-files --stage 
100644 aee89ef43dc3b0ec6a7c6228f742377692b50484 0  .gitignore 
100755 0ac339497485f7cc80d988561807906b2fd56172 0  my_executable_script.sh 

デフォルトでは、Gitはファイルシステムの属性を尊重し、それに応じてGitのファイルモードを設定しようとします。あなたはfalseにcore.filemodeオプションを設定することで、これを無効にすることができます

git config core.fileMode false 

詳細情報はGit docsにそのオプションで見つけることができます。あなたがGitのファイルモードが設定されていない場合には下落したが、ファイルが正しいファイルシステムフラグを持っている場合

、モードを削除しようと再び設定:

git update-index --chmod=-x path/to/file 
git update-index --chmod=+x path/to/file 
+0

私はtest.sh、git commit、push、checkoutを別のサーバで実行すると、そのファイルのpermsです:-rw-rw-r-- 1 user user 12 Dec 5 11:42 test。 sh –

+0

私はちょうど私のリポジトリの1つでテストを行い、期待通りに動作します。アクセス許可は、Windowsで提供されたコマンドを使用してファイルに設定されています。私のサーバ(Debian)のファイルでは、-rw-r-r-permissions以前に-rwxr-xr-xに設定されていました。ローカルマシンとリモートマシンでどんなgitバージョンを使用しますか? – Antwane

+0

私のローカルではgitバージョン1.9.5、チェックアウトを行っているサーバーではgit 1.7.1です。 –

4

Antwane's answerが正しいこと、そしてこれがコメントする必要がありますが、コメントには十分なスペースがなく、書式設定ができません。 :-)私はGitのでは、ファイルのパーミッションがに記録されていることを追加したいだけのどちらか644または755(綴ら(100644100755など ; 100部分は「正規のファイル」)を意味します

diff --git a/path b/path 
new file mode 100644 

-former-644は、ファイルがではなく、であることを意味し、後者は、であることを意味します。は実行可能にする必要があります。ファイルシステム内の実際のファイルモードは、OSによって異なります。システムでは、ビットはあなたのumaskの設定は通常「グループ」と「その他」の書き込み許可を取り除くのに022、「その他」の書き込み許可のみを取り除く場合は002となります。プライバシーを特に懸念していて、「グループ」と「その他」の両方から読み取り、書き込み、および実行の許可を削除したい場合は、077かもしれません。いくつかのリポジトリがそれらモード664と木のエントリを持つようにGitの


初期のバージョンでは、グループ権限を保存しました。 Modern Gitはそうではありませんが、オブジェクトの一部を変更することができないため、古い権限オブジェクトは古いツリーオブジェクトに残っています。

関連する問題