2015-02-06 14 views
27

Tôi đang làm việc trên một trang web có máy chủ chạy Git. Tôi đang sử dụng Git để triển khai (không phải GitHub). Điều này được thiết lập trước khi tôi tham gia sử dụng một số hook method và tôi đã gọi this question và nhập các lệnh bên dưới, nhưng nó không hoạt động.Làm thế nào để lấy một tệp đơn lẻ từ kho lưu trữ máy chủ trong Git?

Vì vậy, về cơ bản, làm cách nào để kéo một tệp từ máy chủ? Ví dụ: nếu tôi muốn cập nhật tệp index.php cục bộ của mình? git pull index.php?

+1

Bản sao có thể có của [Chỉ có thể lấy một tệp trong Git?] (Http://stackoverflow.com/questions/16230838/is-it-possible-to-pull-just-one-file-in- git) –

+0

Bản sao có thể có của [Cách thanh toán chỉ một tệp từ kho git?] (http://stackoverflow.com/questions/2466735/how-to-checkout-only-one-file-from-git-repository) –

Trả lời

64

Có thể làm (trong kho triển khai):

git fetch 
// git fetch will download all the recent changes, but it will not put it in your current checked out code (working area). 

Tiếp nối bởi:

git checkout origin/master -- path/to/file 
//git checkout origin/master -- path/to/file will checkout the particular file from the the downloaded changes (origin/master). 
+1

Cảm ơn bạn. Vì vậy, bạn có ý nghĩa gì bởi ' '? tên tập tin? Và nếu tập tin của tôi nằm trong thư mục gốc thì điều đó có nghĩa là tôi phải gõ: 'git checkout -m index.php index.php'? – vsvs

+0

Cảm ơn bạn đã giải thích. – vsvs

+0

Liệu nó có phát triển thành '* origin */master' hoặc nó có thể từ bất kỳ điều khiển từ xa nào không? Toàn bộ lịch sử có bị kéo vào repo của tôi hay tệp đó dường như xuất hiện một cách kỳ diệu? –

8
git fetch --all 
git checkout origin/master -- <your_file_path> 
git add <your_file_path> 
git commit -m "<your_file_name> updated" 

này là giả sử bạn đang kéo các tập tin từ nguồn gốc/master.

-3
git clone <git_repository>.git <path_to_desired_file> 

Vì vậy, để kéo MINAStatCollector.java từ: https://github.com/igniterealtime/Openfire/tree/master/src/java/org/apache/mina/management, bạn thực hiện như sau:

git clone https://github.com/igniterealtime/Openfire.git Openfire/src/java/org/apache/mina/management/MINAStatCollector.java 
+0

Chỉ cần lưu ý rằng điều này không sao chép một tệp duy nhất ... Nó sao chép toàn bộ kho lưu trữ vào đường dẫn của tệp bạn muốn sao chép. –

0

Thử sử dụng:

git checkout BRANCHNAME - fileName

Ex: git checkout chủ - index.php

0

Kịch bản này xuất hiện khi bạn - hoặc lực lượng lớn hơn bạn - có xé một tập tin trong repo địa phương của bạn và bạn chỉ muốn khôi phục một bản sao mới của phiên bản mới nhất của nó từ repo. Chỉ cần xóa tệp bằng/bin/rm (không phải git rm) hoặc đổi tên/ẩn nó và sau đó phát hành git pull sẽ không hoạt động: git thông báo sự vắng mặt của tệp và giả định bạn có thể muốn nó thoát khỏi repo (git diff sẽ hiển thị tất cả các dòng đã xóa từ tệp bị thiếu).

git pull không khôi phục tập tin cục bộ mất tích luôn tôi thất vọng về git, có lẽ vì tôi đã bị ảnh hưởng bởi hệ thống kiểm soát phiên bản khác (ví dụ svn update mà tôi tin rằng sẽ khôi phục các file đã bị ẩn tại địa phương).

git reset --hard HEAD là một cách khác để khôi phục tệp quan tâm vì nó ném đi mọi thay đổi không được cam kết mà bạn có. Tuy nhiên, như đã lưu ý here, git reset là một lệnh nguy hiểm tiềm ẩn nếu bạn có bất kỳ thay đổi không được cam kết nào khác mà bạn quan tâm.

Chiến lược git fetch ... git checkout được ghi chú ở trên bởi @chrismillah là một cách phẫu thuật tốt để khôi phục tệp được đề cập.

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