Làm cách nào để kéo một tệp từ kho lưu trữ máy chủ trong Git?


114

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 bằng phương thức hook , và tôi đã tham khảo câu hỏi này và nhập các lệnh bên dưới, nhưng nó không hoạt động.

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



Câu trả lời:


194

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).

Theo dõi bởi:

git checkout origin/master -- path/to/file
// git checkout <local repo name (default is origin)>/<branch name> -- path/to/file will checkout the particular file from the downloaded changes (origin/master).

1
Cảm ơn bạn. Vậy ý bạn là <revision>gì? tên tập tin? Và nếu tệp của tôi nằm trong thư mục gốc, điều đó có nghĩa là tôi phải nhập git checkout -m index.php index.php:?
vsv

Cám ơn vì đã giải thích.
vsv

Nó có cần được *origin*/masterhoặc có thể được từ bất kỳ điều khiển từ xa? Toàn bộ lịch sử được 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?
Bernhard Döbler 23/09/17

Nếu bạn gặp lỗi này "không khớp với bất kỳ (các) tệp nào được biết đến với git": "đường dẫn / đến / tệp" không được là bản sao của đường dẫn mà bạn nhận được từ vị trí tệp trên GitHub, nghĩa là "repoName / fileName" , bạn nên loại bỏ "repoName /" và sau đó nó sẽ hoạt động.
Eduard

1
@ BernhardDöbler nó có thể là bất kỳ chi nhánh nào từ xa :)
chrismillah

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

Điều này giả sử bạn đang kéo tệp từ origin / master.


13

Đây có thể là giải pháp:

git fetch

git checkout origin/master -- FolderPathName/fileName

Cảm ơn.


5

Trường hợp này xảy ra khi bạn - hoặc lực lượng lớn hơn bạn - đã xử lý một tệp trong kho lưu trữ cục bộ 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 tệp đó từ kho lưu trữ đó. Đơn giản 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 đó đưa ra một git pullsẽ không hoạt động: git thông báo sự vắng mặt của tệp và giả định rằng bạn có thể muốn nó biến mất khỏi repo (git diff sẽ hiển thị tất cả các dòng bị xóa khỏi tệp tin thất lạc).

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

git reset --hard HEADlà một cách thay thế để khôi phục tệp quan tâm vì nó loại bỏ bất kỳ thay đổi chưa cam kết nào mà bạn có. Tuy nhiên, theo ghi nhận ở đây , git reset là một lệnh tiềm ẩn nguy hiểm nếu bạn có bất kỳ thay đổi chưa cam kết nào khác mà bạn quan tâm.

Các git fetch ... git checkoutchiến lược đã nêu ở trên bởi @chrismillah là một cách phẫu thuật tốt đẹp để khôi phục các tập tin trong câu hỏi.


1
tán thành nhiều hơn những bình luận khác. Cảm ơn bạn
The lõm

3

Tôi đang tìm kiếm nhiệm vụ hơi khác, nhưng điều này giống như những gì bạn muốn:

git archive --remote=$REPO_URL HEAD:$DIR_NAME -- $FILE_NAME |
tar xO > /where/you/want/to/have.it

Ý tôi là, nếu bạn muốn tìm nạp path/to/file.xz, bạn sẽ đặt DIR_NAMEthành path/toFILE_NAMEđến file.xz. Vì vậy, bạn sẽ kết thúc với một cái gì đó như

git archive --remote=$REPO_URL HEAD:path/to -- file.xz |
tar xO > /where/you/want/to/have.it

Và không ai giữ bạn khỏi bất kỳ hình thức giải nén nào khác thay vì tar xOtất nhiên (Chính tôi là người cần một đường ống ở đây, vâng).


1

Hãy thử sử dụng:

git checkout branchName -- fileName

Ví dụ:

git checkout master -- index.php

2
Chú ý: "git checkout master - index.php" điều này không thực hiện kiểm tra từ máy chủ, nhưng từ cơ sở dữ liệu git cục bộ từ lần kéo cuối cùng.
Roberto Novakosky

0
https://raw.githubusercontent.com/[USER-NAME]/[REPOSITORY-NAME]/[BRANCH-NAME]/[FILE-PATH]

Ví dụ. https://raw.githubusercontent.com/vipinbihari/apana-result/master/index.php

Thông qua đó, bạn sẽ nhận được nội dung của một tệp riêng lẻ dưới dạng văn bản hàng. Bạn có thể tải xuống văn bản đó bằng wget.

Ví dụ. https://raw.githubusercontent.com/vipinbihari/apana-result/master/index.php


1
OP đã chỉ ra cụ thể trong câu hỏi rằng anh ta không sử dụng github.
Zeitounator

0

Lô cửa sổ này hoạt động bất kể có trên GitHub hay không. Tôi đang sử dụng nó vì nó hiển thị một số cảnh báo rõ ràng. Bạn sẽ nhận thấy rằng hoạt động chậm và truyền tải hàng trăm megabyte dữ liệu , vì vậy không sử dụng phương pháp này nếu yêu cầu của bạn dựa trên băng thông / bộ nhớ RW khả dụng.

thin_checkout.bat

pushd "%~dp0"
if not exist .\ms-server-essentials-docs mkdir .\ms-server-essentials-docs
pushd .\ms-server-essentials-docs
git init
git remote add origin -f https://github.com/MicrosoftDocs/windowsserverdocs.git
git config core.sparseCheckout true
(echo EssentialsDocs)>>.git\info\sparse-checkout
git pull origin master

=>

C: \ Users \ tên người dùng \ Máy tính để bàn> precision_checkout.bat

C: \ Users \ user name \ Desktop> pushd "C: \ Users \ user name \ Desktop \"

C: \ Users \ user name \ Desktop> nếu không tồn tại. \ Ms-server-Essentials-docs mkdir. \ Ms-server-essentials-docs

C: \ Users \ user name \ Desktop> pushd. \ Ms-server-Essentials-docs

C: \ Users \ user name \ Desktop \ ms-server-essentials-docs> git init Kho lưu trữ Git trống được khởi tạo trong C: / Users / user name / Desktop / ms-server-essentials-docs / .git /

C: \ Users \ user name \ Desktop \ ms-server-essentials-docs> git remote add origin -f https://github.com/MicrosoftDocs/windowsserverdocs.git Đang cập nhật origin remote: Liệt kê các đối tượng: 97, đã xong. từ xa: Đếm đối tượng: 100% (97/97), đã xong. remote: Nén các đối tượng: 100% (44/44), đã xong. từ xa: Tổng 145517 (delta 63), tái sử dụng 76 (delta 53), gói tái sử dụng 145420 Đối tượng nhận: 100% (145517/145517), 751,33 MiB | 32,06 MiB / s, đã xong. Giải quyết các delta: 100% (102110/102110), đã xong. Từ https://github.com/MicrosoftDocs/windowsserverdocs * [nhánh mới]
1106-xung đột -> origin / 1106-xung đột * [nhánh mới]
FromPrivateRepo -> origin / FromPrivateRepo * [nhánh mới]
PR183 -> origin / PR183 * [chi nhánh mới]
xung đột -> origin / xung đột * [new branch]
eross-msft-patch-1 -> origin / eross-msft-patch-1 * [new branch]
master -> origin / master * [new branch] patch-1
-> origin / patch-1 * [new branch] repo_sync_working_branch -> origin / repo_sync_working_branch * [new branch]
shortpatti-patch-1 -> origin / shortpatti-patch-1 * [new branch]
shortpatti-patch-2 -> origin / shortpatti -patch-2 * [nhánh mới]
shortpatti-patch-3 -> origin / shortpatti-patch-3 * [nhánh mới]
shortpatti-patch-4 -> origin / shortpatti-patch-4 * [nhánh mới]
shortpatti-patch -5 -> origin / shortpatti-patch-5 * [chi nhánh mới]
shortpatti-patch-6 -> origin / shortpatti-patch-6 * [chi nhánh mới]
shortpatti-patch-7 -> origin / shortpatti-patch-7 * [nhánh mới]
shortpatti-patch-8 -> origin / shortpatti-patch-8

C: \ Users \ user name \ Desktop \ ms-server-essentials-docs> git config core.sparseCheckout true

C: \ Users \ user name \ Desktop \ ms-server-essentials-docs> (echo EssentialsDocs) 1 >>. Git \ info \ precision-checkout

C: \ Users \ user name \ Desktop \ ms-server-essentials-docs> git pull origin master
Từ https://github.com/MicrosoftDocs/windowsserverdocs
* branch master -> FETCH_HEAD

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.