Chỉ cập nhật và cam kết quyền của tệp bằng kiểm soát phiên bản git


186

Chỉ cần biến một some.shtệp thành tệp thực thi ( chmod 755 ...), các quyền đã được cập nhật nhưng không phải là nội dung. Có cách nào để cam kết tập tin vào git, để bit thực thi sẽ được khôi phục / thiết lập trên clone / checkout / pull không?

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

Câu trả lời:


190

Theo mặc định, git sẽ cập nhật quyền thực thi tệp nếu bạn thay đổi chúng. Nó sẽ không thay đổi hoặc theo dõi bất kỳ quyền nào khác.

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

Nhìn vào dự án của bạn, trong .gitthư mục cho configtệp 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ó thành truetrong 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 bình thường các tập tin của bạn. Nó sẽ chỉ cam kết thay đổi quyền.


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 tới github?
BreakPhreak

2
Bạn có thể thấy nó khi bạn xem một tệp (ví dụ: trên tệp gitignore của Rails , bạn sẽ tìm thấy 100644 dưới dạng quyền của tệp)
Vincent B.

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

38
Câu trả lời này là sai! Git chỉ theo dõi nếu một tập tin có thể thực thi được hay không. Nó không theo dõi sự cho phép tập tin khác như có thể ghi hoặc có thể đọc được. Đọc stackoverflow.com/a/11231682/2311074 để biết thêm.
Adam

Đối với tôi webstorm không bắt được sự thay đổi, nhưng trong git status, tôi thấy những thay đổi ..
Townsheriff

192

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

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

Như bạn có thể thấy tập tin có 644 quyền (bỏ qua 100). Chúng tôi muốn đổi nó thành 755:

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

cam kết 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

7
Cần lưu ý rằng bạn thực sự phải sử dụng '-x / + x'. Bạn không thể đặt bất kỳ quyền hoặc bitmask nào khác.
Devolus

lưu ý sử dụng git commit -akhông làm gì cho tôi, tuy nhiên cài đặt thông báo trên dòng lệnh đã làm. Một chút
châm biếm

Thứ tự lệnh phải là: # git update-index --chmod=+x script.sh # git ls-tree HEAD # git commit -m "Changing file permissions" # git push
SimonDepelchin

29

Không làm việc cho tôi.

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

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

Vấn đề dường như là git chỉ nhận ra một số thay đổi quyền nhất định.


51
Chính xác - gitthực sự chỉ theo dõi xem một tệp có thể thực thi được hay không, không phải là toàn bộ quyền * nix. Vì vậy, bạn sẽ phải chuyển 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ì đó đáng để cam kết ...
twalberg

Tôi không thể tìm thấy tài liệu rõ ràng: tôi có thể sử dụng trình kích hoạt hậu hành động nào để đặt perm phù hợp?
Otheus

2
Chà, có một post-checkoutcái móc vào 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 không. Bạn có thể tốt hơn nếu chỉ có một tập lệnh shell bổ sung trong repo của bạn để đặt mọi thứ phù hợp. Ngoài ra, có một vài dự án ngoài đó có khả gitnăng lưu trữ siêu dữ liệu, nhưng tôi chưa bao giờ thực sự thử bất kỳ dự án nào trong số đó ...
twalberg

1
Tôi đã thay đổi quyền truy cập tệp thành 777 và đã làm git update-index --refresh, nhưng các chương trình khác old mode 100644 new mode 100755. Nó không cập nhật tất cả các quyền
hudac

xem @tishma trả lời tại đây stackoverflow.com/questions/14557106/ . Đây là những gì làm việc cho tôi
gary69
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.