WindowsのGitでファイル実行モード権限を作成するにはどうすればよいですか?


378

私はWindowsでGitを使用していて、1回のコミットで実行可能なシェルスクリプトをgit repoにプッシュしたいと考えています。

通常、2つのステップ(git commit)を実行する必要があります。

$ vi install.sh
$ git add install.sh  
$ git commit -am "add new file for installation" # first commit
[master f2e92da] add support for install.sh
 1 files changed, 18 insertions(+), 3 deletions(-)
 create mode 100644 install.sh
$ git update-index --chmod=+x install.sh
$ git commit -am "update file permission"        # second commit
[master 317ba0c] update file permission
  0 files changed
  mode change 100644 => 100755 install.sh

これらの2つのステップを1つのステップに結合するにはどうすればよいですか?git設定?Windowsコマンド?

思い出させる:2つの答えは良いgit add --chmod=+x fileです、新しいgitバージョンでサポートされています

参照:2番目のコミットについては、WindowsのGitファイル権限の質問を参照してください


10
git 2.9.x / 2.10(2016年第3四半期)では、git add --chmod=+x実際に可能です。下記の私の回答をご覧ください。エドワード・トムソンの功績です。
VonC

5
選択した回答をgit add --chmod=+xバージョンに更新する価値があります
mikemaccana

回答:


590

2つのコミットでこれを行う必要はありません。ファイルを追加して、1つのコミットで実行可能としてマークできます。

C:\Temp\TestRepo>touch foo.sh

C:\Temp\TestRepo>git add foo.sh

C:\Temp\TestRepo>git ls-files --stage
100644 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       foo.sh

お気づきのように、追加後のモードは0644(つまり、実行不可)です。ただし、コミットする前に実行可能としてマークできます。

C:\Temp\TestRepo>git update-index --chmod=+x foo.sh

C:\Temp\TestRepo>git ls-files --stage
100755 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 0       foo.sh

そして今、ファイルはモード0755(実行可能)です。

C:\Temp\TestRepo>git commit -m"Executable!"
[master (root-commit) 1f7a57a] Executable!
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100755 foo.sh

これで、単一の実行可能ファイルを含む単一のコミットができました。


147

あれば確かに、それはいいだろうgit-add持っていた--mode旗を

git 2.9.x / 2.10(2016年第3四半期)では実際にそれが可能になります(Edward Thomsonに感謝):

git add --chmod=+x -- afile
git commit -m"Executable!"

これにより、すべてのプロセスがより速くなり、core.filemodefalseに設定されていても機能します。

Edward Thomson(によるコミット4e55ed3(2016年5月31日)を参照してください。 協力者:ヨハネスシンデリン((合併によりJunio C浜野- -コミットc8b080a、2016年7月6日)ethomson
dscho
gitster

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

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

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


22

ファイルにすでに + xフラグが設定されいる場合、git update-index --chmod=+xフラグはリポジトリに保存されていませんが、gitは何もせず、コミットするものがないと見なします。

最初にフラグを削除し、gitコマンドを実行してから、フラグを元に戻す必要があります。

chmod -x <file>
git update-index --chmod=+x <file>
chmod +x <file>

次に gitが変更を確認し、変更をコミットできるようにします。


9

注意事項は、最初にconfig gitファイルにfilemode設定するfalseか、次のコマンドを使用する必要があることを確認する必要があります。

git config core.filemode false

そして、次のコマンドで0777パーミッションを設定できます:

git update-index --chmod=+x foo.sh

3

cmd.exeにコマンドがなくtouch、機能しません。chmodgit update-index --chmod=+x foo.sh

最後に、skip-worktreeビットを設定して解決します。

git update-index --skip-worktree --chmod=+x foo.sh
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.