gitバージョン管理を使用してファイルの権限のみを更新およびコミットする


187

ジャストはなってsome.sh(実行可能ファイルにファイルをchmod 755 ...コンテンツ)、権限が更新されましたが、ありません。ファイルをgit にコミットして、実行可能ビットがクローン / チェックアウト / プルで復元/設定されるようにする方法はありますか?

更新:新しい権限が送信されたことをどのように追跡できgithubますか?

回答:


190

デフォルトでは、gitは実行ファイルの権限を変更すると更新します。他の権限を変更または追跡しません。

実行権限の変更時に変更が表示されない場合は、ファイルモードを無視する構成がgitにある可能性があります。

ファイルの.gitフォルダーでプロジェクトを確認するconfigと、次のようなものが表示されます。

[core]
    filemode = false

trueお好みのテキストエディターで変更するか、次のコマンドを実行します。

git config core.filemode true

そうすれば、ファイルを正常にコミットできるはずです。権限の変更のみをコミットします。


ありがとうございました!権限の変更が送信されたことをどのように追跡できgithubますか?
BreakPhreak

2
ファイルを表示すると表示されます(たとえば、Rails gitignore fileでは、ファイルのアクセス許可として100644が見つかります)

8
gitを使用してWindowsで権限を変更する(実際にファイルの権限を変更してコミットする):blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html
fooMonster

39
この答えは間違っています!Gitは、ファイルが実行可能かどうかを追跡するだけです。書き込みや読み取りなど、他のファイルのアクセス許可は追跡しません。詳細については、stackoverflow.com / a / 11231682/2311074を参照してください。
アダム

私にとってwebstormは、変更をキャッチしませんでしたが、中にgit statusは、私は変更を確認...
Townsheriff

193

@fooMonsterの記事が役に立った

# git ls-tree HEAD
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe    script.sh

ご覧のとおり、ファイルには644の権限があります(100を無視)。これを755に変更します。

# git update-index --chmod=+x script.sh

変更をコミットする

# git commit -m "Changing file permissions"
[master 77b171e] Changing file permissions
0 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.sh

7
実際には「-x / + x」を使用する必要があることに注意してください。他の権限やビットマスクを設定することはできません。
Devolus、

を使用git commit -aしても何も起こらないことに注意してください。ただし、コマンドラインでメッセージを設定すると機能しました。ちょっとした癖
JonnyRaa 2018

コマンドの順序は次のようになります # git update-index --chmod=+x script.sh # git ls-tree HEAD # git commit -m "Changing file permissions" # git push
SimonDepelchin

30

私のために働いていません。

モードはtrueで、ファイルのパーマは変更されていますが、gitは実行する作業がないと言っています。

git init
git add dir/file
chmod 440 dir/file
git commit -a

問題は、gitが特定の権限の変更のみを認識することです。


51
正解です。git実際には、ファイルが実行可能かどうかだけが追跡され、* nix権限の完全なセットは追跡されません。したがって、コミットする価値がある何かを変更したと考えるために、ファイルを実行可能ファイルとそうでないファイルの間で切り替える必要があります...
twalberg

明確なドキュメントが見つかりませんでした。おそらく、それに応じてパーマを設定するために使用できるアクション後トリガーは何ですか?
Otheus 2013年

2
さて、いくつかのケースをカバーするpost-checkoutフックがありますがgit、それがワークツリーのファイルを更新するすべての可能なことをカバーするかどうかはわかりません。リポジトリに追加のシェルスクリプトを用意して、状況に応じて設定することをお勧めします。あるいは、gitメタデータを保存するために拡張するプロジェクトがいくつかありますが、実際にそれらを試したことはありません...
twalberg

1
ファイルのアクセス許可を777に変更して変更しましたgit update-index --refreshが、差分が表示されますold mode 100644 new mode 100755。すべての権限が更新されなかった
hudac

ここで@tishmaの回答をご覧くださいstackoverflow.com/questions/14557106/…。これは私にとってうまくいったことです
gary69
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.