2012-05-09 35 views
103

Chỉ cần bật một tệp some.sh thành tệp thực thi (chmod 755 ...), các quyền đã được cập nhật nhưng không được cập nhật. Có cách nào để cam kết tệp vào git, để bit thực thi sẽ được khôi phục/được đặt trên sao chép/checkout/kéo?Chỉ cập nhật quyền đối với tệp trong git

Cập nhật: cách tôi có thể theo dõi các quyền mới đã được gửi đến github?

Trả lời

105

Theo mặc định, git sẽ cập nhật quyền tệp nếu bạn thay đổi chúng.

Nếu bạn không thấy bất kỳ thay đổi nào khi sửa đổi quyền, bạn có thể có một cấu hình trong git bỏ qua chế độ tệp.

Nhìn vào dự án của bạn, trong thư mục .git cho file config và bạn sẽ thấy một cái gì đó như thế này:

[core] 
    filemode = false 

Bạn có thể thay đổi nó để true trong trình soạn thảo văn bản yêu thích của bạn, hoặc chạy:

git config core.filemode true 

Sau đó, bạn sẽ có thể cam kết thông thường các tệp của mình. Nó sẽ chỉ cam kết thay đổi quyền.

+0

cảm ơn bạn! làm thế nào tôi có thể theo dõi các thay đổi quyền được gửi đến 'github'? – BreakPhreak

+2

Bạn có thể nhìn thấy nó khi bạn xem một tập tin (ví dụ, trên [Rails gitignore file] (https://github.com/rails/rails/blob/master/.gitignore), bạn sẽ thấy 100644 là sự cho phép tập tin) –

+6

Thực hiện các thay đổi quyền trên Windows bằng git (thực sự thay đổi quyền của tệp và cam kết): http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html – fooMonster

17

Không hoạt động cho tôi.

Chế độ này là đúng, tệp perms đã được thay đổi, nhưng git nói không có việc phải làm.

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

Vấn đề có vẻ là git chỉ nhận các thay đổi quyền nhất định.

+35

Chính xác - 'git' thực sự chỉ theo dõi xem tệp có thực thi được hay không, không phải toàn bộ quyền * nix. Vì vậy, bạn sẽ phải chuyển đổi một tập tin giữa thực thi/không cho nó nghĩ rằng bạn đã thay đổi một cái gì đó có giá trị ... – twalberg

+0

Tôi không thể tìm thấy tài liệu rõ ràng: những gì kích hoạt sau hành động tôi có thể sử dụng có lẽ để thiết lập perms cho phù hợp ? – Otheus

+1

Vâng, có một móc 'sau khi kiểm tra' trong' git', nó sẽ bao gồm một số trường hợp, nhưng tôi không chắc liệu nó có bao gồm tất cả những thứ có thể cập nhật các tệp trong worktree của bạn hay không. Bạn có thể tốt hơn khi chỉ có thêm một kịch bản lệnh shell trong repo của bạn để thiết lập mọi thứ cho phù hợp. Ngoài ra, có một vài dự án ở đó làm tăng thêm 'git' để lưu trữ siêu dữ liệu, nhưng tôi chưa bao giờ thực sự thử bất kỳ siêu dữ liệu nào ... – twalberg

92

bài viết @fooMonster làm việc cho tôi

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

Như bạn có thể thấy các tập tin có 644 phép (bỏ qua số 100). Chúng tôi muốn thay đổi nó để 755:

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

cam kết những thay đổi

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

Điều này chỉ hoạt động đối với cờ "thực thi" –

Các vấn đề liên quan