2011-12-12 29 views
22

Giả sử tôi có tệp fname là liên kết tượng trưng cho tệp từ một số kho/dự án khác, giả sử ../../proj2/fname.git commit symlink dưới dạng tệp thông thường

Có cách nào để thêm/cam kết fname làm tệp thông thường không?

Dường như, theo mặc định, git cung cấp chế độ tệp 120000 và đặt đường dẫn đến tệp được liên kết dưới dạng nội dung blob.

Tôi biết điều này vì git ls-tree hiển thị chế độ 120000 cho tệp và git cat-file -p hiển thị ../../proj2/fname làm nội dung của blob.

+0

Xin chào, bạn có thể vui lòng cập nhật các bước về symlinkinf một tệp bằng Git không? –

Trả lời

13

Không, Git biết đó là một liên kết tượng trưng. Nó sẽ là loại nguy hiểm cho Git giả vờ khác, vì nó sau đó sẽ kết thúc bằng văn bản cho các tập tin bên ngoài repo. Theo dõi nó như một liên kết tượng trưng chính xác là hành vi dự định.

+2

Tôi mong đợi hành vi ghi trong trường hợp này là xóa liên kết tượng trưng và thay thế bằng một tệp thông thường. – hasen

+2

@hasenj: Nếu đó là những gì bạn muốn, hãy xóa liên kết tượng trưng và thay thế bằng một bản sao của tệp được liên kết. Hành vi "mong đợi" của bạn liên quan đến việc Git sửa đổi một tệp khi ... thêm? cam kết? Đó không phải là một điều tốt. – Cascabel

+1

Có nhiều khả năng hữu ích hơn khi có các liên kết tượng trưng trỏ vào kho lưu trữ git của bạn. Đó sẽ là trường hợp nếu bạn có một kho lưu trữ cho cấu hình của một hệ thống và sau đó bạn đã thay thế các tệp cấu hình được quản lý bằng các liên kết đến các tệp trong kho lưu trữ đã kiểm xuất. – LovesTha

3

Trong Windows, bạn có thể làm những gì bạn muốn với một ngã ba

Ví dụ, chương trình thường giữ nộp các thiết lập ở đâu đó trên hệ thống, nhưng tôi muốn để điều khiển phiên bản nó trong kho của tôi. Tôi không thể di chuyển tệp và tôi không muốn tạo bản sao hoặc bất kỳ thứ gì

Nếu chúng tôi đặt một Lối tắt Windows trong thư mục kho lưu trữ, anh ta sẽ xem tệp đó dưới dạng tệp nhị phân; không phải là một thư mục trỏ đến tất cả các tập tin thực tế mà bạn muốn bao gồm

Điều chúng ta cần là khả năng đặt một cái gì đó như một phím tắt Windows trong kho, nhưng git rằng sẽ coi như chỉ là một thư mục:

cd /location/of/my/repo/ 
mklink /j "_linkTo_VimSettings" "C:\Program Files (x86)\Vim" 
+0

Điều gì sẽ xảy ra nếu bạn hợp nhất thay đổi từ thượng nguồn? Git sẽ sửa đổi nội dung nguồn? Giống như Jefromi đề cập đến trong [câu trả lời khác] (http://stackoverflow.com/a/8470365/109618), điều đó sẽ nguy hiểm. –

32

Nếu bạn muốn tệp xuất hiện thay vì liên kết, bạn có thể sử dụng lệnh ln để tạo liên kết cứng thay vì liên kết sym (ln -s).

Tạo liên kết cứng, bạn có thể tạo cùng một tệp xuất hiện dưới hai thư mục khác nhau, do đó, thay đổi nó qua bất kỳ liên kết nào sẽ phản ánh thay đổi qua cả hai liên kết và tệp sẽ tồn tại trong cả hai thư mục được theo dõi bởi git.

Tôi hy vọng lệnh 'mklink /j' của Windows ở số Bukov's answer thực hiện điều này, nhưng tôi thực sự không biết gì cả.

+3

Câu trả lời này có vẻ hữu ích hơn tôi so với câu trả lời từ @Jefromi. – JohnAllen

+1

Cần lưu ý rằng các liên kết cứng với 'ln' chỉ hoạt động đối với các tệp, chứ không phải các thư mục. – BillyTom

+0

Chính xác những gì tôi đã tìm kiếm! Kudos cho hệ thống UNIX! – blackjacx

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