Git의 서버 저장소에서 단일 파일을 가져 오는 방법은 무엇입니까?


114

Git을 실행하는 서버가있는 사이트에서 작업 중입니다. 배포를 위해 Git을 사용하고 있습니다 (GitHub가 아님). 이것은 후크 방법을 사용하여 참여하기 전에 설정 되었으며이 질문을 참조하고 아래 명령을 입력했지만 작동하지 않았습니다.

서버에서 단일 파일을 어떻게 가져 옵니까? 예를 들어, 내 로컬 파일 index.php를 업데이트하고 싶다면? git pull index.php?



답변:


194

다음을 수행 할 수 있습니다 (배포 된 저장소에서).

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

뒤에 :

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
감사합니다. 그래서 당신은 무엇을 의미 <revision>합니까? 파일 이름? 내 파일이 루트 디렉토리에 있으면 다음을 입력해야 함을 의미합니다. git checkout -m index.php index.php?
vsvs

설명 해주셔서 감사합니다.
vsvs

*origin*/master원격 이어야합니까, 아니면 원격으로부터 가능합니까? 전체 히스토리가 내 저장소로 가져 왔나요? 아니면 파일이 마술처럼 보이나요?
Bernhard Döbler

"git에 알려진 파일과 일치하지 않았습니다"라는 오류가 발생하는 경우 : "path / to / file"은 "repoName / fileName"을 의미하는 GitHub의 파일 위치에서 가져온 경로의 복사본이 아니어야합니다. , "repoName /"을 제거하면 작동합니다.
Eduard

1
BernhardDöbler @는 원격 :)에서 어떤 지점이 될 수
chrismillah

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

이것은 원본 / 마스터에서 파일을 가져오고 있다고 가정합니다.


13

이것이 해결책이 될 수 있습니다.

git fetch

git checkout origin/master -- FolderPathName/fileName

감사.


5

이 시나리오는 로컬 리포지토리에서 파일엉망으로 만들고 리포지토리에서 최신 버전의 새 복사본을 복원하려고 할 때 발생합니다. 간단히 / 빈 / RM (자식하지 RM)으로 파일을 삭제하거나 숨기기 / 이름을 변경 한 후 발급 git pull하지 않습니다 일 : 자식이 파일의 부재를 통지하고 아마합니다 (REPO에서 사라 원하는 가정 git diff의 모든 행이 삭제 표시됩니다 누락 된 파일).

git pull로컬에서 누락 된 파일을 복원하지 않는 것은 아마도 다른 버전 제어 시스템 (예 : 로컬에 숨겨진 파일을 복원 것이라고 생각하는 svn 업데이트)의 영향을 받았기 때문에 git에 대해 항상 실망 스러웠습니다 .

git reset --hard HEAD커밋되지 않은 변경 사항을 제거하므로 관심있는 파일을 복원하는 다른 방법입니다. 그러나 여기 에서 언급했듯이 git reset은 다른 커밋되지 않은 변경 사항이있는 경우 잠재적으로 위험한 명령입니다.

git fetch ... git checkout@chrismillah에 의해 위에서 언급 전략은 문제의 파일을 복원 할 수있는 좋은 수술 방법입니다.


1
다른 사람들의 의견보다 훨씬 간결합니다. 당신 감사
Thecave3

3

나는 약간 다른 작업을 찾고 있었지만 이것은 당신이 원하는 것처럼 보입니다.

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

난 당신이 가져하려는 경우, 의미 path/to/file.xz, 당신은 설정됩니다 DIR_NAMEpath/toFILE_NAMEfile.xz. 그래서, 당신은 다음과 같이 끝날 것입니다.

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

그리고 물론 아무도 당신을 다른 형태의 포장 풀기에서 지키지 않습니다 tar xO(여기에 파이프가 필요한 사람은 나였습니다.


1

다음을 사용해보십시오.

git checkout branchName -- fileName

전의:

git checkout master -- index.php

2
주의 : "git checkout master-index.php"이것은 서버에서 체크 아웃하지 않고 마지막 풀에서 로컬 git 데이터베이스에서 체크 아웃합니다.
Roberto Novakosky

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

전의. https://raw.githubusercontent.com/vipinbihari/apana-result/master/index.php

이를 통해 개별 파일의 내용을 행 텍스트로 얻을 수 있습니다. wget으로 해당 텍스트를 다운로드 할 수 있습니다.

전의. https://raw.githubusercontent.com/vipinbihari/apana-result/master/index.php


1
OP는 그가 github를 사용하지 않는다는 질문에 구체적으로 표시했습니다.
Zeitounator

0

이 Windows 배치는 GitHub에 있는지 여부에 관계없이 작동합니다. 나는 그것을 사용하고 있습니다. 작업이 느리고 수백 메가 바이트의 데이터를 순회한다는 것을 알 수 있으므로 요구 사항이 사용 가능한 대역폭 / RW 메모리를 기반으로하는 경우이 방법을 사용하지 마십시오.

sparse_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 \ 사용자 이름 \ Desktop> sparse_checkout.bat

C : \ Users \ 사용자 이름 \ Desktop> pushd "C : \ Users \ 사용자 이름 \ Desktop \"

C : \ Users \ user name \ Desktop> 존재하지 않는 경우. \ ms-server-essentials-docs mkdir. \ ms-server-essentials-docs

C : \ Users \ 사용자 이름 \ Desktop> pushd. \ ms-server-essentials-docs

C : \ Users \ user name \ Desktop \ ms-server-essentials-docs> git init C : / Users / user name / Desktop / ms-server-essentials-docs / .git /에서 빈 Git 리포지토리를 초기화했습니다.

C : \ Users \ user name \ Desktop \ ms-server-essentials-docs> git remote add origin -f https://github.com/MicrosoftDocs/windowsserverdocs.git Update origin remote : Enumerating objects : 97, done. 원격 : 개체 계수 : 100 % (97/97), 완료. 원격 : 개체 압축 : 100 % (44/44), 완료. 원격 : 총 145517 (델타 63), 재 사용됨 76 (델타 53), 팩 재 사용됨 145420 개체 수신 : 100 % (145517/145517), 751.33 MiB | 32.06 MiB / s, 완료. 델타 해결 : 100 % (102110/102110), 완료. 에서 https://github.com/MicrosoftDocs/windowsserverdocs * [새로운 지점]
1106 - 충돌 -> 원 / 1106-충돌 * [새로운 지점]
FromPrivateRepo -> 원 / FromPrivateRepo * [새로운 지점]
PR183 -> 원 / PR183 * [새 지점]
충돌 수정-> 오리진 / 충돌 수정 * [새 브랜치]
eross-msft-patch-1-> 오리진 / eross-msft-patch-1 * [새 브랜치]
마스터-> 오리진 / 마스터 * [새 브랜치] 패치 -1-
> origin / patch-1 * [새 브랜치] repo_sync_working_branch-> origin / repo_sync_working_branch * [새 브랜치]
shortpatti-patch-1-> origin / shortpatti-patch-1 * [새 브랜치]
shortpatti-patch-2-> origin / shortpatti -patch-2 * [새 브랜치]
shortpatti-patch-3-> origin / shortpatti-patch-3 * [새 브랜치]
shortpatti-patch-4-> origin / shortpatti-patch-4 * [새 브랜치]
shortpatti-patch -5-> origin / shortpatti-patch-5 * [새 브랜치]
shortpatti-patch-6-> origin / shortpatti-patch-6 * [새 브랜치]
shortpatti-patch-7-> origin / shortpatti-patch-7 * [새 브랜치]
shortpatti-patch-8-> origin / shortpatti-patch-8

C : \ Users \ 사용자 이름 \ Desktop \ ms-server-essentials-docs> git config core.sparseCheckout true

C : \ Users \ 사용자 이름 \ Desktop \ ms-server-essentials-docs> (echo EssentialsDocs) 1 >>. git \ info \ sparse-checkout

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.