Quyền truy cập tệp Git trên Windows


172

Tôi đã đọc qua một vài câu hỏi về quyền truy cập tệp trong Git và tôi vẫn hơi bối rối. Tôi đã có một repo trên GitHub rẽ nhánh từ người khác. Đăng hợp nhất, chúng nên giống hệt nhau. Tuy nhiên:

$ git diff --summary origin/epsilon master/epsilon
 mode change 100644 => 100755 ants/dist/sample_bots/csharp/compile.sh
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/MyBot.coffee
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/ants.coffee
 mode change 100644 => 100755 ants/util/block_test.sh
 mode change 100644 => 100755 manager/mass_skill_update.py
 mode change 100644 => 100755 worker/jailguard.py
 mode change 100644 => 100755 worker/release_stale_jails.py
 mode change 100644 => 100755 worker/start_worker.sh

Tôi đã thử thay đổi quyền truy cập tệp nhưng không thay đổi kết quả khác.

Câu trả lời:


346

Tôi đã tìm thấy giải pháp về cách thay đổi quyền (cũng) trên Windows tại đây: http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html

Ví dụ: lệnh sau thêm quyền thực thi của người dùng vào một tệp tùy ý:

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

6
+1: chính xác những gì tôi cần để đảm bảo các tập lệnh shell mà tôi cam kết từ Windows (nơi tôi đã core.filemodeđặt false) thực sự có tập bit thực thi.
tomlogic

Trong trường hợp của tôi, tôi cũng đã thêm một dòng mới vào tệp và chỉ sau đó mới có thể cam kết
oshai

5
Trong Windows, sử dụng git-bash, tôi cần một --addcờ để thực thi vì một số lý do : git update-index --add --chmod=+x <file>. Sau đó, tập tin đã sẵn sàng với chmod
Jefferson Quesado

Không còn tác dụng nữa, trong git bash cũng như trong dấu nhắc cmd.exe.
Ben

106

Từ một câu hỏi khác ở đây trên stackoverflow: Làm cách nào để Git bỏ qua các thay đổi chế độ tệp (chmod)?

Thử:

git config core.filemode false

Từ git-config (1) :

   core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.

Cảm ơn. Tôi cũng thấy vậy Đã thử nó và nó không làm cho sự khác biệt.
Synesso

3
Tôi gặp vấn đề tương tự với OP và không thể thay đổi bất kể hardtôi đã cố gắng thiết lập lại như thế nào . Điều này đã lừa tôi.
Jo-Herman Haugholt

11
[dự án] /. git / config có thể chứa cùng một cài đặt và sẽ ghi đè ~ / .gitconfig. Nếu bạn đang cố gắng đặt nó trên toàn cầu, hãy đảm bảo rằng nó không bị ghi đè cục bộ.
Phile nhị phân

1
Tôi thấy điều này là cần thiết trên NTFS, thật đáng buồn.
Marc.2377

1
Đó là câu trả lời!
Andrew Surdu

29

Một lớp lót tiện dụng cho Git Bash:

find . -name '*.sh' | xargs git update-index --chmod=+x

Nó sẽ đánh dấu tất cả các .shtập tin là thực thi. Sau đó, bạn chỉ cần có git commit.


2
Chỉnh sửa nhỏ cho @ benoit-blanchon one-liner ... .sh phải được trích dẫn. tìm thấy . -name ' .sh' | xargs git update-index --chmod = + x
Steven the Easy Amuse

Bạn nói đúng, tôi chỉnh sửa câu trả lời. Cảm ơn @SteventheEasilyAmuse.
Benoit Blanchon

15

Nếu bạn sử dụng Cygwin git (hoặc Linux git, tôi cũng vậy), rất có thể cài đặt core.filemode của bạn đã được đặt ở cấp dự án trong $ projdir / .git / config. Tôi thấy rằng tôi phải thực hiện các thao tác sau để khiến gg Cygwin và git Windows của tôi cùng tồn tại độc đáo trên hệ thống tệp Windows mà không có thay đổi tên tệp không tồn tại mọi lúc:

  • xóa cài đặt dòng core.filemode trong $ projdir / .git / config
  • trong Windows git, hãy chạy "git config --global core.filemode false"

Điều này cho phép gg Cygwin của tôi tiếp tục thấy các thay đổi về tên tệp, thường có liên quan, trong khi hướng dẫn git Windows bỏ qua các thay đổi về tên tệp mà nó nhìn thấy, thường là dương tính giả.


5

Tôi đã sửa nó bằng cách thay đổi quyền truy cập tệp trong Ubuntu, cam kết, đẩy và tất cả đều ổn. Có vẻ như nó không hoạt động với msysgit trên Windows / NTFS.


Tôi muốn giới thiệu GitHub cho windows. Giao diện tuyệt vời và hệ vỏ thực sự đẹp, tôi thậm chí còn thực hiện cài đặt khóa ssh tương đối dễ dàng và cài đặt luồng git.
Sangoku

5

Đầu tiên kiểm tra quyền truy cập tập tin bằng cách sử dụng lệnh dưới đây.

git ls-files --stage

Sau đó thay đổi quyền. Ở đây "x" thể hiện quyền thực thi.

git update-index --chmod=+x 'scriptname.ext'

Bây giờ xác minh lại các quyền.

git ls-files - sân khấu

==============================================

nếu bạn đang sử dụng PC Windows, nhưng triển khai trên máy linux. Thực hiện lệnh dưới đây ở vị trí đầu tiên để làm cho nó tương thích để chạy trên máy linux

dos2unix scriptname.ext scriptname.ext


Không có cách nào để làm một cái gì đó như thế git update-index --chmod=1777 'scriptname.ext'nào?
Alex Barker

Bạn đã điều hướng đến đường dẫn, nơi tập tin kịch bản tồn tại? @alex
Sireesh Yarlagadda
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.