git 저장소에서 하나의 파일 만 드문 체크 아웃하는 방법은 무엇입니까?


445

git repo에서 하나의 파일 만 체크 아웃하려면 어떻게해야합니까?


8
체크 아웃이란 무엇입니까? 원격 저장소에서 하나의 파일 사본 만 얻습니까?
Cascabel

2
해당 리포지토리가 gitweb을 사용하는 경우 파일을 직접 다운로드 할 수 있습니다. 아래에서 설명하려고 할 때, 당신이 묻는 것은 실제로 표준 git 작업이 아닙니다.
Cascabel


크롬 확장 프로그램 GitHub Mate 를 사용하면 파일 아이콘을 클릭하여 다운로드 할 수 있습니다.
Cam Song

답변:


251

원래, 나는 2012 년에 언급 git archive(참조 자레드 포 시스대답로버트 기사대답을 하기 때문에) git1.7.9.5 (2012 월) , 폴 Brannan대답 :

git archive --format=tar --remote=origin HEAD:path/to/directory -- filename | tar -O -xf -

그러나 2013 년에는 더 이상 원격 https://github.com URL에 사용할 수 없었습니다 .
이전 페이지 " 저장소를 아카이브 할 수 있습니까? "를 참조하십시오.

현재 (2018) 페이지 " GitHub의 콘텐츠 및 데이터 보관 정보 "에서는 GHTorrent 또는 GH Archive 와 같은 타사 서비스를 사용할 것을 권장 합니다.


따라서 로컬 복사본 / 복제를 처리 할 수도 있습니다.

에서 언급 한대로 베어 저장소의 로컬 복사본이있는 경우 선택적으로 다음을 할 수있는 이 답변 ,

git --no-pager --git-dir /path/to/bar/repo.git show branch:path/to/file >file

또는 먼저 리포지토리를 복제해야합니다. 즉, 작업 트리에서 전체 기록을 가져옵니다.-.git 리포지토리-

  • 그러나 Git1.7 이상을 사용하는 경우 스파 스 체크 아웃을 수행 할 수 있습니다.
    • 스파 스 체크 아웃 옵션 사용 ( git config core.sparsecheckout true)
    • .git/info/sparse-checkout파일 에서보고 싶은 것을 추가
    • 작업 트리를 다시 읽고 필요한 것만 표시

작업 트리를 다시 읽으려면 :

$ git read-tree -m -u HEAD

그렇게하면 원하는 파일을 정확히 포함하는 작업 트리가 생깁니다 (파일이 하나 인 경우에도)


리처드 고메스 (포인트 코멘트에 )에 " 나는 복제, 가져 않는 방법 또는 스파 스 체크 아웃 한 디렉토리 또는 자식 저장소 디렉토리의 목록을? "

히스토리 다운로드를 피하는 bash 함수는 단일 브랜치를 검색하고 필요한 파일 또는 디렉토리 목록을 검색합니다.


스파 스 체크 아웃에서 변경 사항을 커밋 할 수 있습니까?
Tilo

2
@Tilo : 확실하지는 않지만 복제본이 완전한 것을 고려하면 가능해야합니다.
VonC

3
다른 답변에서 언급했듯이 이것이 "git checkout HASH path-to-file"보다 나은 점은 무엇입니까? 당시에는 사용할 수 없었습니까?
0x6A75616E

2
@juand 아이디어는 git checkout을하기 전에 모든 작업 트리를로드 할 필요가 없었습니다.
VonC

2
우리는 git archive지금 사용할 수 있습니다 .
Jared Forsyth

197

먼저 모든 파일의 기본 체크 아웃을 억제하는 -n 옵션과 --depth 1 옵션을 사용하여 repo를 복제하십시오. 즉, 각 파일의 최신 개정 만 가져옵니다.

git clone -n git://path/to/the_repo.git --depth 1

그런 다음 원하는 파일 만 확인하십시오.

cd the_repo
git checkout HEAD name_of_file

7
말 그대로 이것은 단일 파일을 체크 아웃하지만 OP는 모든 파일을 가지고 있기 때문에 OP 가하고 싶은 일이 거의 아닙니다 (체크 아웃은 아무 일도하지 않습니다).
Cascabel

5
나는 이것이 작동하지 않는다고 생각합니다- -n작업 트리와 색인이 동기화됩니다. 즉, 모든 컨텐츠가 삭제 된 것으로 나타납니다. git reset HEAD또는 중 하나를 수행해야합니다 git checkout HEAD file. git의 작동 방식을 실제로 이해하지 않으면이 시점에서 저장소로 작업하는 것이 실제로 어렵습니다.
Cascabel

2
DanielElliott와 같은 OP 및 OOP가 실제로 파일을 (Repo가 아닌) rm -rf .gitNickMoore의 스크립트에 추가 하면 복제 된 Repo의 모든 흔적을 정리하고 Jefromi의 사용하기 어려운 리포지토리에 대한 우려를 해결할 수 있습니다. 수신 후 후크를 생성하여 다른 수신 후 후크 자동 마술의 버전을 업데이트해야하는 오늘날의 과제와 같은 여러 응용 프로그램에 매우 유용합니다.
호브

6
이것은 허용되는 것보다 훨씬 더 나은 대답입니다. 계속 읽고 다행입니다.
Eric Uldall

6
이 답변이 최고입니다 (그러나 git이런 종류의 작업에는 최고가 아닙니다). 이 답변은 이 질문 또는 다른 인기있는 질문다른 질문 에도 유효 합니다 :로 변경 name_of_file하십시오 name_of_folder. 요즘 Git (2014)은 리포 소유자에게 하위 모듈 을 제공 하여 리포 사용자에게 친숙한 일부 모듈 을 제공합니다.
피터 크라우스

108

이미 git repo 사본이있는 경우 항상 a git log를 사용하여 파일 버전을 체크 아웃하여 해시 ID를 찾으십시오 (예 : 3cdc61015724f9965575ba954c8cd4232c8b42e4).

git checkout hash-id path-to-file

실제 예는 다음과 같습니다.

git checkout 3cdc61015724f9965575ba954c8cd4232c8b42e4 /var/www/css/page.css

12
해시뿐만 아니라 태그 또는 분기 이름도 사용할 수 있습니다. 그것들은 종종 더 쉽습니다.
Rob Kennedy

4
좋은 해결책입니다. 그러나 path-to-file디렉토리이고 current HEAD에 특정 파일이 포함되어 있지만 target그렇지 않은 경우 파일 이 올바르게 업데이트되지 않습니다. 처리 할 수있는 방법이 있습니까?
MasterMind

2
더 간단하고 좋습니다. 감사!
Kerem atam 9

오류 : pathspec. 경로가 로컬 PC의 경로 또는 원격 PC의 경로입니까?
Paul McCarthy

1
@PaulMcCarthy-지역
techexpert

60

일반적으로 git첫 번째 답변에서 제안한 것처럼 전체 저장소를 다운로드하지 않고 하나의 파일 만 다운로드 할 수는 없습니다 . Git은 CVS / SVN처럼 생각대로 파일을 저장하지 않지만 프로젝트의 전체 기록을 기반으로 파일을 생성하기 때문입니다.

그러나 특정 경우에 대한 해결 방법이 있습니다. 에 대한 자리로 아래의 예를 들면 user, project, branch, filename.

깃 허브

wget https://raw.githubusercontent.com/user/project/branch/filename

GitLab

wget https://gitlab.com/user/project/raw/branch/filename

GitWeb

Server-GitWeb 에서 Git을 사용하는 경우 예를 들어 시도 할 수 있습니다 (올바른 경로로 변경).

wget "http://example.com/gitweb/?p=example;a=blob_plain;f=README.txt;hb=HEAD"

drupalcode.org의 GitWeb

예:

wget "http://drupalcode.org/project/ads.git/blob_plain/refs/heads/master:/README.md"

googlesource.com

base64 인코딩 버전의 원시 파일을 다운로드 할 수있는 문서화되지 않은 기능이 있습니다.

curl "https://chromium.googlesource.com/chromium/src/net/+/master/http/transport_security_state_static.json?format=TEXT" | base64 --decode

다른 경우에는 Git 리포지토리가 웹 인터페이스를 사용하고 있는지 확인하십시오.

이 모든 웹 인터페이스를 사용하지 않는 것, 당신과 같은 외부 서비스에 코드를 밀어 고려할 수 GitHub의 , 의 Bitbucket , . 거울로 사용하십시오.

wget설치 하지 않은 경우 curl -O (url)다른 방법으로 시도하십시오 .


2
그리고 github을 사용하지 않으면?
줄루

60
그런 다음이 방법을 사용하지 마십시오.
Alan

4
나는 git이 "프로젝트의 전체 히스토리를 기반으로 [파일]을 생성한다"는 진술에 반대한다. git은 파일 상태의 스냅 샷을 해시 트리 형식으로 저장한다고 말하는 것이 더 정확합니다. 확실히 발전이 없습니다.
Jay Sullivan

3
이 답변은 내가 (삭제을 확인하지 않고) 단순히 내가 의도적으로 몇몇 다른 사람과 함께 로컬 삭제 거라고 파일을 복원하려고 이후 나에게 가장 유용하지만 다른 사람들이 아직도있는 동안 나중에이 필요했다 결정
rshdev을

8
Git으로 간단한 일을하고 싶을 때 침몰하는 느낌이 들며 어떻게 진행되는지 확인하고 두뇌가 멈추는 대답의 절반을 지나면 모든 것이 흐릿하고 슬프다는 것을 알고 있습니다. 그런 다음 아래로 스크롤 wget하여 행복과 함께이 훌륭한 답변과 단순함을 찾으십시오 . 고마워요
pgr



29

이제 할 수 있습니다! 이것이 Google의 첫 번째 결과이므로 최신 상태로 업데이트한다고 생각했습니다. git 1.7.9.5의 출현으로 git archive, 원격 호스트에서 단일 파일을 검색 할 수 있는 명령이 있습니다.

git archive --remote=git://git.foo.com/project.git HEAD:path/in/repo filename | tar -x

https://stackoverflow.com/a/5324532/290784 에서 전체 답변을 참조 하십시오.


@Benubird 그것은 당신의 repo의 호스트 명입니다. github의 경우 (github이 마지막으로 확인하지 않은 아카이브 명령을 지원 한 경우)github.com
Jared Forsyth가

이것은 나를 위해 일했지만 분기 (또는 refname)를 단독으로 지정 한 경우에만, 예를 들어 just HEAD또는 masternot HEAD:directory입니다.
stormbeta

3
이것은 bitbucket에서 나를 위해 일했습니다 :git archive --remote=git@bitbucket.org:user/repo branch:path/to file | tar -x
Dave

24

GIT 1.7.2.2에서 작업

예를 들어 분기가 branch1 인 원격 some_remote 가 있습니다 . branch32

특정 파일을 체크 아웃하려면이 명령을 호출하십시오.

git checkout remote/branch path/to/file

예를 들어 다음과 같습니다.

git checkout some_remote/branch32 conf/en/myscript.conf
git checkout some_remote/branch1 conf/fr/load.wav

이 체크 아웃 명령은 전체 파일 구조 conf / en 및 conf / fr을이 명령을 호출하는 현재 디렉토리에 복사합니다 (물론 이전에는 어느 시점에서 git init를 실행했다고 가정합니다)


5
그러나 당신은 git fetch some_remote전에 달리기해야 합니까?
phihag

15

매우 간단합니다 :

git checkout from-branch-name -- path/to/the/file/you/want

이것은 체크 아웃되지 않습니다 from-branch-name 지점을 . 어떤 브랜치에 있더라도 지정된 브랜치에서 해당 단일 파일 만 체크 아웃됩니다.

다음은 맨 페이지의 관련 부분입니다. git-checkout

git checkout [-p|--patch] [<tree-ish>] [--] <pathspec>...
       When <paths> or --patch are given, git checkout does not switch
       branches. It updates the named paths in the working tree from the
       index file or from a named <tree-ish> (most often a commit). In
       this case, the -b and --track options are meaningless and giving
       either of them results in an error. The <tree-ish> argument can be
       used to specify a specific tree-ish (i.e. commit, tag or tree) to
       update the index for the given paths before updating the working
       tree.

블로그 포스트 에서 저를 가르쳐 준 Ariejan de Vroom의 모자 팁 .


4
사실이 아니라면 먼저 복제해야합니다.
Antoniossss

9

git clone --filter 힘내 2.19에서

이 옵션은 실제로 서버에서 불필요한 객체를 가져 오는 것을 건너 뜁니다.

git clone --depth 1 --no-checkout --filter=blob:none \
  "file://$(pwd)/server_repo" local_repo
cd local_repo
git checkout master -- mydir/myfile

서버는 다음과 같이 구성되어야합니다.

git config --local uploadpack.allowfilter 1
git config --local uploadpack.allowanysha1inwant 1

v2.19.0부터 서버 지원은 없지만 이미 로컬에서 테스트 할 수 있습니다.

TODO : --filter=blob:none모든 얼룩을 건너 뛰지 만 여전히 모든 트리 개체를 가져옵니다. 그러나 정상적인 저장소에서는 파일 자체와 비교할 때 크기가 작아야하므로 이미 충분합니다. 질문 : https://www.spinics.net/lists/git/msg342006.html 개발자가 대답했습니다.--filter=tree:0 가 작업 .

--depth 1이미 의미 함을 기억 --single-branch하십시오. Git에서 단일 분기를 어떻게 복제합니까?

file://$(path)git clone프로토콜 shenanigans 를 극복하기 위해 필요합니다 : 상대 경로로 로컬 자식 저장소를 얕은 복제하는 방법은 무엇입니까?

의 형식 --filter은 문서화되어 있습니다man git-rev-list 있습니다.

이 기능을 지원하기 위해 Git 원격 프로토콜이 확장되었습니다.

힘내 나무에 대한 문서 :

그것을 테스트

#!/usr/bin/env bash
set -eu

list-objects() (
  git rev-list --all --objects
  echo "master commit SHA: $(git log -1 --format="%H")"
  echo "mybranch commit SHA: $(git log -1 --format="%H")"
  git ls-tree master
  git ls-tree mybranch | grep mybranch
  git ls-tree master~ | grep root
)

# Reproducibility.
export GIT_COMMITTER_NAME='a'
export GIT_COMMITTER_EMAIL='a'
export GIT_AUTHOR_NAME='a'
export GIT_AUTHOR_EMAIL='a'
export GIT_COMMITTER_DATE='2000-01-01T00:00:00+0000'
export GIT_AUTHOR_DATE='2000-01-01T00:00:00+0000'

rm -rf server_repo local_repo
mkdir server_repo
cd server_repo

# Create repo.
git init --quiet
git config --local uploadpack.allowfilter 1
git config --local uploadpack.allowanysha1inwant 1

# First commit.
# Directories present in all branches.
mkdir d1 d2
printf 'd1/a' > ./d1/a
printf 'd1/b' > ./d1/b
printf 'd2/a' > ./d2/a
printf 'd2/b' > ./d2/b
# Present only in root.
mkdir 'root'
printf 'root' > ./root/root
git add .
git commit -m 'root' --quiet

# Second commit only on master.
git rm --quiet -r ./root
mkdir 'master'
printf 'master' > ./master/master
git add .
git commit -m 'master commit' --quiet

# Second commit only on mybranch.
git checkout -b mybranch --quiet master~
git rm --quiet -r ./root
mkdir 'mybranch'
printf 'mybranch' > ./mybranch/mybranch
git add .
git commit -m 'mybranch commit' --quiet

echo "# List and identify all objects"
list-objects
echo

# Restore master.
git checkout --quiet master
cd ..

# Clone. Don't checkout for now, only .git/ dir.
git clone --depth 1 --quiet --no-checkout --filter=blob:none "file://$(pwd)/server_repo" local_repo
cd local_repo

# List missing objects from master.
echo "# Missing objects after --no-checkout"
git rev-list --all --quiet --objects --missing=print
echo

echo "# Git checkout fails without internet"
mv ../server_repo ../server_repo.off
! git checkout master
echo

echo "# Git checkout fetches the missing file from internet"
mv ../server_repo.off ../server_repo
git checkout master -- d1/a
echo

echo "# Missing objects after checking out d1/a"
git rev-list --all --quiet --objects --missing=print

GitHub 업스트림 .

힘내 v2.19.0의 출력 :

# List and identify all objects
c6fcdfaf2b1462f809aecdad83a186eeec00f9c1
fc5e97944480982cfc180a6d6634699921ee63ec
7251a83be9a03161acde7b71a8fda9be19f47128
62d67bce3c672fe2b9065f372726a11e57bade7e
b64bf435a3e54c5208a1b70b7bcb0fc627463a75 d1
308150e8fddde043f3dbbb8573abb6af1df96e63 d1/a
f70a17f51b7b30fec48a32e4f19ac15e261fd1a4 d1/b
84de03c312dc741d0f2a66df7b2f168d823e122a d2
0975df9b39e23c15f63db194df7f45c76528bccb d2/a
41484c13520fcbb6e7243a26fdb1fc9405c08520 d2/b
7d5230379e4652f1b1da7ed1e78e0b8253e03ba3 master
8b25206ff90e9432f6f1a8600f87a7bd695a24af master/master
ef29f15c9a7c5417944cc09711b6a9ee51b01d89
19f7a4ca4a038aff89d803f017f76d2b66063043 mybranch
1b671b190e293aa091239b8b5e8c149411d00523 mybranch/mybranch
c3760bb1a0ece87cdbaf9a563c77a45e30a4e30e
a0234da53ec608b54813b4271fbf00ba5318b99f root
93ca1422a8da0a9effc465eccbcb17e23015542d root/root
master commit SHA: fc5e97944480982cfc180a6d6634699921ee63ec
mybranch commit SHA: fc5e97944480982cfc180a6d6634699921ee63ec
040000 tree b64bf435a3e54c5208a1b70b7bcb0fc627463a75    d1
040000 tree 84de03c312dc741d0f2a66df7b2f168d823e122a    d2
040000 tree 7d5230379e4652f1b1da7ed1e78e0b8253e03ba3    master
040000 tree 19f7a4ca4a038aff89d803f017f76d2b66063043    mybranch
040000 tree a0234da53ec608b54813b4271fbf00ba5318b99f    root

# Missing objects after --no-checkout
?f70a17f51b7b30fec48a32e4f19ac15e261fd1a4
?8b25206ff90e9432f6f1a8600f87a7bd695a24af
?41484c13520fcbb6e7243a26fdb1fc9405c08520
?0975df9b39e23c15f63db194df7f45c76528bccb
?308150e8fddde043f3dbbb8573abb6af1df96e63

# Git checkout fails without internet
fatal: '/home/ciro/bak/git/test-git-web-interface/other-test-repos/partial-clone.tmp/server_repo' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

# Git checkout fetches the missing directory from internet
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1/1), 45 bytes | 45.00 KiB/s, done.
remote: Enumerating objects: 1, done.
remote: Counting objects: 100% (1/1), done.
remote: Total 1 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (1/1), 45 bytes | 45.00 KiB/s, done.

# Missing objects after checking out d1
?f70a17f51b7b30fec48a32e4f19ac15e261fd1a4
?8b25206ff90e9432f6f1a8600f87a7bd695a24af
?41484c13520fcbb6e7243a26fdb1fc9405c08520
?0975df9b39e23c15f63db194df7f45c76528bccb

결론 : 제외한 모든 얼룩이 d1/a없습니다. 예를 들어 f70a17f51b7b30fec48a32e4f19ac15e261fd1a4, d1/b체크 아웃 한 후에는 없습니다d1/ .

참고 root/rootmybranch/mybranch도 누락,하지만 --depth 1가죽이 누락 된 파일 목록에서. 를 제거하면 --depth 1누락 된 파일 목록에 표시됩니다.


2
좋아요, 그 옵션을 놓쳤을 것입니다. +1
VonC

7

당신은 그것을 할 수 있습니다

git archive --format=tar --remote=origin HEAD | tar xf -
git archive --format=tar --remote=origin HEAD <file> | tar xf -

7

파일 이름이 123.txt라고 가정하면 다음과 같이 작동합니다.

git checkout --theirs  123.txt

파일이 디렉토리 A 내에있는 경우 파일을 올바르게 지정해야합니다.

git checkout --theirs  "A/123.txt"

6

이미 주어진 것에 대한 두 가지 변형 :

git archive --format=tar --remote=git://git.foo.com/project.git HEAD:path/to/directory filename | tar -O -xf -

과:

git archive --format=zip --remote=git://git.foo.com/project.git HEAD:path/to/directory filename | funzip

파일을 표준 출력에 씁니다.


4

git에서는 파일을 업데이트하기 전에 '체크 아웃'하지 않습니다 . 이것이 당신이 따르는 것 같습니다.

clearcase, csv 등과 같은 많은 시스템에서는 파일을 변경하기 전에 파일을 '체크 아웃'해야합니다. 힘내는 이것을 요구하지 않습니다. 저장소를 복제 한 다음 로컬 저장소 사본을 변경하십시오.

파일을 업데이트하면 다음을 수행 할 수 있습니다.

git status

어떤 파일이 수정되었는지 확인합니다. index먼저 커밋하려는 것을 추가하십시오 ( index체크 인 목록과 같습니다).

git add .

또는

git add blah.c

그러면 git status수정 된 파일과 index커밋 또는 체크인 할 준비 가 된 파일이 표시 됩니다.

저장소 사본에 파일을 커미트하려면 다음을 수행하십시오.

git commit -a -m "commit message here"

설명서 및 안내서 링크는 git웹 사이트 를 참조하십시오 .


1
그리고이 단일 파일을 패치하여 다시 제출하는 것이 목표라면 푸시 (또는이 프로젝트에 대한 푸시 액세스 권한이 없습니까?)하거나 git format-patch제출할 패치를 작성하는 데 사용해야 합니다 ( git format-patch -1패치 작성). 가장 최근의 커밋에 대해서만).
Cascabel

고마워, Clearcase에서 Git에게 오는 좋은 설명이었습니다
Kolob Canyon

4

다음은 git 저장소 내에서 특정 파일 만 가져오고 밀어 넣는 완벽한 솔루션입니다.

  1. 먼저 특별한 힌트로 git 저장소를 복제해야합니다.
git clone --no-checkout <git url>
  1. 다음 단계는 다음 명령을 사용하여 색인에서 스테이지되지 않은 파일을 제거하는 것입니다.
git reset
  1. 이제 다음 명령으로 변경하려는 파일을 가져올 수 있습니다.
git checkout origin/master <path to file>
  1. 이제 저장소 폴더에는 즉시 편집을 시작할 수있는 파일이 있습니다. 편집 후에는 평범하고 가족적인 명령 시퀀스를 실행해야합니다.
git add <path to file>
git commit -m <message text>
git push

추가 정보에 대한 링크 도 참조하십시오 .


1

중앙 집중식 버전 제어에서 아이디어를 전달하려고하는 것처럼 들립니다. 자식 저장소로 작업하려면 복제하십시오. 그런 다음 단일 파일 또는 단일 커밋의 스냅 샷이 아니라 작업 트리의 모든 컨텐츠와 모든 히스토리 (적어도 현재 브랜치의 팁으로 이어지는 모든 것)가 있습니다.

 git clone /path/to/repo
 git clone git://url/of/repo
 git clone http://url/of/repo

1

원격 Git 저장소의 특정 브랜치 에서 특정 파일이 필요한 경우 명령은 다음과 같습니다.

git archive --remote=git://git.example.com/project.git refs/heads/mybranch path/to/myfile |tar xf -

나머지는 @VonC의 답변에서 파생 될 수 있습니다.

마스터 브랜치에서 특정 파일이 필요한 경우 다음과 같습니다.

git archive --remote=git://git.example.com/project.git HEAD path/to/myfile |tar xf -

태그에서 특정 파일이 필요한 경우 다음과 같습니다.

git archive --remote=git://git.example.com/project.git mytag path/to/myfile |tar xf -

Mother Corp.은 자동화 된 HTTP / S 액세스가 이제 막 시작되었다고 결정했습니다! 이 기술을 사용하면 Whole Thing을 확인하지 않고도 저장소에서 단일 파일을 가져 오는 것을 자동화 할 수 있습니다. 감사합니다.
JS.

0

나는 여기에 나와있는 것이 무엇인지 알지 못하므로 누군가 내 상황에있을 때 포함시킬 것입니다.

내 상황에는 10,000 개 파일의 원격 저장소가 있으며 Linux 시스템 용 RPM 파일을 빌드해야합니다. RPM 빌드에는 모든 것의 git clone이 포함됩니다. RPM 빌드를 시작하려면 하나의 파일 만 있으면됩니다. 필요한 모든 작업을 수행하는 전체 소스 트리를 복제 할 수 있지만 필요한 파일이 하나 인 경우 모든 파일을 다운로드하는 데 2 ​​분이 더 걸립니다. 논의 된 git archive 옵션을 사용하려고하는데 "치명적 : 작업이 프로토콜에서 지원되지 않습니다"라는 메시지가 나타납니다. 서버에서 일종의 아카이브 옵션을 활성화 해야하는 것처럼 보이며 내 서버는 작업을 수행하는 것을 어렵게하는 관료적 깡패에 의해 유지 관리됩니다.

마지막으로 비트 버킷의 웹 인터페이스로 이동하여 필요한 파일 하나를 보았습니다. 링크를 마우스 오른쪽 버튼으로 클릭하여 파일의 원시 사본을 다운로드하고 결과 팝업에서 "복사본 바로 가기"를 선택했습니다. 자동화해야했기 때문에 원시 파일을 다운로드 할 수 없었으며 Linux 서버에 브라우저 인터페이스가 없습니다.

토론을 위해 URL이 생성되었습니다.

https://ourArchive.ourCompany.com/projects/ThisProject/repos/data/raw/foo/bar.spec?at=refs%2Fheads%2FTheBranchOfInterest

먼저 로그인해야했기 때문에 비트 버킷 저장소에서이 파일을 직접 다운로드 할 수 없습니다. 약간의 파기 후에, 나는 이것이 효과가 있음을 발견했다.

echo "myUser:myPass123"| base64
bXlVc2VyOm15UGFzczEyMwo=

curl -H 'Authorization: Basic bXlVc2VyOm15UGFzczEyMwo=' 'https://ourArchive.ourCompany.com/projects/ThisProject/repos/data/raw/foo/bar.spec?at=refs%2Fheads%2FTheBranchOfInterest' > bar.spec

이 조합을 통해 다른 모든 것을 빌드하는 데 필요한 하나의 파일을 다운로드 할 수있었습니다.


0

정식 체크 아웃 또는 유사한 로컬 작업을 수행하는 대신이 답변을 추가하고 있습니다. Git 제공자의 웹 인터페이스에 액세스 할 수 있다고 가정하면 주어진 커밋에서 파일을 직접 볼 수 있습니다. 예를 들어 GitHub에서 다음과 같은 것을 사용할 수 있습니다.

https://github.com/hubotio/hubot/blob/ed25584f/src/adapter.coffee

여기 ed25584f 은 관심있는 커밋의 SHA-1 해시에서 처음 8 자이며 소스 파일의 경로입니다.

마찬가지로 Bitbucket에서 다음을 시도 할 수 있습니다.

https://bitbucket.org/cofarrell/stash-browse-code-plugin/src/06befe08

이 경우 커밋 해시를 소스 URL 끝에 배치합니다.


-1

파일을 다운로드하기 만하면 Git으로 체크 아웃 할 필요가 없습니다.

GitHub Mate 는 훨씬 쉽게 할 수 있습니다. Chrome 확장 프로그램이므로 파일 아이콘을 클릭하여 다운로드 할 수 있습니다. 또한 오픈 소스


7
git! =github
jan groth 1

-3

파일의 로컬 버전을 편집하고 중앙 서버에서 유지 관리되는 원래 버전으로 되돌리려면 Git Extensions를 사용하여 쉽게 수행 할 수 있습니다 .

  • 처음에는 파일이 수정되었으므로 커밋으로 표시됩니다.
  • 파일 트리 메뉴에서 파일을 선택 (두 번 클릭)하십시오
  • 단일 파일의 개정 트리가 나열됩니다.
  • 트리의 상단 / 헤드를 선택하고 다른 이름으로 저장을 마우스 오른쪽 버튼으로 클릭하십시오.
  • 수정 된 로컬 버전 파일을 덮어 쓰려면 파일을 저장하십시오.
  • 이제 파일의 버전이 올 바르고 더 이상 커밋으로 표시되지 않습니다!

쉬운!

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