2012-04-29 32 views
9

Có vẻ Git được bỏ qua ~/.gitconfigGit bỏ qua gitconfig?

$ git config --global core.filemode false 

$ git config -l 
core.filemode=false 
core.filemode=true 

Vì vậy, hiện nay có 2 mục cho core.filemode và git vẫn không bỏ qua chế độ File thay đổi

$ touch modetest 

$ git add . 

$ git commit -m test1 
[master (root-commit) 320cfe4] test1 
0 files changed, 0 insertions(+), 0 deletions(-) 
create mode 100644 modetest 

$ chmod +x modetest 

$ git diff 
diff --git a/modetest b/modetest 
old mode 100644 
new mode 100755 

Dựa trên torek’s answer, tôi đã thêm dòng này để .bash_profile tôi

[ -d .git ] && git config core.filemode false 

Trả lời

2

có lẽ một chút quá mức cần thiết, nhưng trong Cygwin này làm phiền tôi đủ để thâm nhập vào các vấn đề hơn. Khi git được xây dựng từ mã nguồn, nó sẽ kiểm tra hệ thống tệp được xây dựng để xem nó có hiểu được các bit thực thi hay không.

Tôi đã tiếp tục và xây dựng git từ nguồn trên hệ thống Cygwin của tôi và cài đặt nó vào một thư mục cục bộ, sau đó thêm nhị phân vào đường dẫn của tôi. Các bước cơ bản là:

cd ~/ 
mkdir git 
cd git 
mkdir inst 
git clone -c core.autocrlf=false https://github.com/git/git.git 
cd git 
NO_TRUSTABLE_FILEMODE=1 make prefix=/home/[username]/git/inst/ 
NO_TRUSTABLE_FILEMODE=1 make prefix=/home/[username]/git/inst/ install 

Sau đó, thêm một cái gì đó như thế này để .bashrc:

export PATH=/home/[username]/git/inst/bin:$PATH 

Tất nhiên, đó là xây dựng sẽ không làm việc trừ khi bạn có tất cả các build được cài đặt trong Cygwin phụ thuộc. Với một chút nhút nhát xung quanh tôi đã có thể làm điều đó mà không có quá nhiều rắc rối. Bây giờ git init và git clone trên hệ thống đó mặc định filemode thành false. Bí quyết đang định nghĩa NO_TRUSTABLE_FILEMODE cho bản dựng.

15

Khi tạo hoặc khởi tạo lại repo mới, git init luôn đặt giá trị mới cho core.filemode dựa trên kết quả của việc thăm dò hệ thống tệp. Bạn sẽ chỉ phải tự:

git config core.filemode false 

Hoặc:

git config --unset core.filemode 

để làm cho nó tôn trọng một trong ~/.gitconfig của bạn. Nếu bạn chạy lại git init cài đặt cho mỗi lần thử lại sẽ quay lại true trên hệ thống của bạn.

+3

Không hoàn toàn chắc chắn như thế nào git thực sự thực hiện nó. Tôi phải đi sâu vào mã nguồn. Ah, có nó là: nó phụ thuộc vào mục cấu hình git build-time 'NO_TRUSTABLE_FILEMODE'. Nếu nó không được định nghĩa, nó sẽ kiểm tra thời gian chạy bằng chmod-ing '.git/config' mà cuối cùng nó thay thế bằng' .git/config.lock' để loại bỏ chmod tạm thời của nó. Phiên bản tạm thời có bộ u + x bit; nếu nó vẫn được đặt sau chmod, git tin rằng vấn đề x bit. – torek

+0

điều này làm cho cảm giác hoàn hảo, nhưng dù sao là bực bội, tôi đã phải sao chép một dự án từ một máy tính khác 5 lần cho đến khi tôi nhận ra những gì đang xảy ra)) cảm ơn! –

+1

Cảm ơn, tôi biết 'git config --global core.fileMode false' là vô dụng. git fileMode vấn đề tôi đã gặp nó mỗi ngày.Tôi đã phải cấu hình công cụ đó mỗi khi tôi tạo một dự án mới. –

0

(EDIT) để tiếp tục, trên cửa sổ chúng ta cần phải làm:

git config --global --unset core.filemode 
git config --unset core.filemode 
git config core.filemode false 

Và bạn có thể tạo một tập tin cấu hình sản phẩm nào trong Git cài đặt dir cho các thư mục git mới (init):

C:\bin\Git\share\git-core\templates>echo > config 
C:\bin\Git\share\git-core\templates>notepad config 

Và đặt bên trong:

[core] 
filemode = false 
+0

được cập nhật với mẫu để sửa lỗi git init – Tanguy

+0

Ngay cả với chỉnh sửa của bạn, 'git init' sẽ vẫn trả về' filemode = true' –