2015-02-06 8 views
27

Git을 실행하는 서버가있는 사이트에서 작업하고 있습니다. 배포 용으로 Git을 사용하고 있습니다 (GitHub 아님). 이것은 내 참여 이전에 hook method을 사용하여 설정되었고, 나는 this question을 참조하고 아래 명령을 입력했지만 작동하지 않았습니다.Git의 서버 저장소에서 하나의 파일을 가져 오는 방법은 무엇입니까?

기본적으로 서버에서 하나의 파일을 가져 오는 방법은 무엇입니까? 예를 들어, 로컬 파일 index.php를 업데이트하고 싶다면? git pull index.php?

+1

[Git에서 하나의 파일 만 가져올 수 있습니까?] (http://stackoverflow.com/questions/16230838/is-it-possible-to-pull-just-one-file-in- git) –

+0

[git 저장소에서 파일 하나만 체크 아웃하는 방법?] (http://stackoverflow.com/questions/2466735/how-to-checkout-only-one-file-from-git-repository) –

답변

64

그것은 (배포 된 저장소에) 할 수 있습니다 :

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 origin/master -- path/to/file will checkout the particular file from the the downloaded changes (origin/master). 
+1

고맙습니다. 그럼''의 의미는 무엇입니까? 파일 이름? 그리고 내 파일이 루트 디렉토리에 있다면 그것은'git checkout -m index.php index.php'라고 입력해야한다는 뜻입니까? – vsvs

+0

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

+0

'원산지 */마스터'가되어야합니까? 아니면 어떤 리모컨에서 올 수 있습니까? 전체 역사가 내 레포로 가져 왔습니까, 아니면 파일이 마술처럼 보입니까? –

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

이것은 당신이 원산지/마스터에서 파일을 당기는 가정한다. 자식 체크 아웃 마스터 : - 당신은 다음을 수행 https://github.com/igniterealtime/Openfire/tree/master/src/java/org/apache/mina/management : : :

git clone https://github.com/igniterealtime/Openfire.git Openfire/src/java/org/apache/mina/management/MINAStatCollector.java 
-3
git clone <git_repository>.git <path_to_desired_file> 

그래서에서 MINAStatCollector.java를 당겨 - index.php

+0

그냥 하나의 파일을 복제하지 않는다는 것에주의하십시오 ... 복제하려는 파일의 경로에 전체 저장소를 복제합니다. –

0

하여 사용해보십시오 fileName에

자식 체크 아웃 BRANCHNAME을

0

이 시나리오가 나타납니다. 당신이나 당신보다 더 큰 힘이 - 에 로컬 레포에있는 파일을 맹 글링 했으므로 레포에서 최신 버전의 최신 복사본을 복원하고 싶을뿐입니다. 단순히/bin/rm (git rm이 아닌 파일)을 삭제하거나 파일 이름을 변경하거나 숨기고 git pull을 실행하면 작동하지 않습니다. git은 파일의 부재를 알아 차리고 repo에서 사라지 길 원한다고 가정합니다 (git diff은 모든 행이 삭제 된 것을 보여줍니다) 누락 된 파일에서).

git pull

로컬 누락 된 파일을 복원하지 항상 내가 다른 버전 관리 시스템 (나는 로컬 숨겨진 된 파일을 복원 할 것으로 예상 예를 들어, svn update)에 의해 영향을받은 아마도 때문에, 자식에 대해 저를 좌절했다.

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

@chrismillah가 위에 언급 한 전략은 문제의 파일을 복원하는 훌륭한 수술 방법입니다.