programing

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

linuxpc 2023. 5. 26. 20:48
반응형

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

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

원래 2012년에 언급한 바 있습니다(제러드 포사이스답변로버트 나이트의 답변 참조). 1.7.9.5(2012년 3월) 이후 브래넌답변은 다음과 같습니다.

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

그러나 2013년에는 원격 https://github.com URL에서 더 이상 이 작업을 수행할 수 없었습니다.
이전 페이지 "리포지토리를 보관할 수 있습니까?"를 참조하십시오.

현재(2018) 페이지 "GitHub의 컨텐츠데이터 아카이빙에 대하여"에서는 GHTortrent 또는 GH Archive와 같은 타사 서비스를 사용할 것을 권장합니다.


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

또는 이 답변에서 언급한 것처럼 맨 저장소의 로컬 복사본이 있는 경우 다음을 수행할 수 있습니다.

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

또는 레포를 먼저 복제해야 합니다. 즉, 전체 기록을 얻을 수 있습니다.

  • .git repo에서.

  • 작업 트리에서.

  • 그러나 Git1.7+를 사용하는 경우 스파스 체크아웃을 수행할 수 있습니다.

    • 옵션을 합니다.git config core.sparsecheckout true)
    • 에서 보고 .git/info/sparse-checkout
    • 작업 트리를 다시 읽어 필요한 항목만 표시

작업 트리를 다시 읽는 방법

$ git read-tree -m -u HEAD

이렇게 하면 하나의 파일이라도 원하는 것을 정확하게 포함하는 작업 트리가 생성됩니다.


Richard Gomes는 (댓글에서) "어떻게 git 저장소에서 단일 디렉터리 또는 디렉터리 목록을 복제, 가져오기 또는 희박하게 체크아웃할 있습니까?"라고 지적합니다.

단일 분기를 검색하고 필요한 파일 또는 디렉터리 목록을 검색하는 기록 다운로드를 방지하는 bash 함수입니다.


Git 2.40(Q1223)에서는 단일 파일의 이름을 콘으로 지정하는 패턴으로 오인하지 않도록 희소성 패턴을 확인하여 "콘" 모드를 사용하는지 확인하는 논리가 강화되었습니다.

윌리엄 스프렌트()williams-unity의 커밋 5842710(2023년 1월 3일)을 참조하십시오.
(주니오 C 하마노에 의해 합병 -- -- ab85a7d, 2023년 1월 16일 커밋)

dir단일 파일 원뿔 패턴 검사

사인 오프 바이: 윌리엄 스프렌트
애큐드바이: 빅토리아 다이

스파스 체크아웃 문서에는 원뿔 모드 패턴 세트가 디렉터리를 재귀적으로 포함하는 패턴 또는 디렉터리의 모든 파일과 일치하는 패턴으로 제한된다고 나와 있습니다.
스파스 체크아웃 파일에서 이전 매니페스트의 형식은 다음과 같습니다.

/A/B/C/

후자는 다음과 같은 형태로 한 쌍의 패턴이 됩니다.

/A/B/
!/A/B/*/

또는 최상위 파일과 일치하는 특수한 경우:

/*
!/*/

더'add_pattern_to_hashsets()함수에는 비반복 패턴이 발생할 때 콘 모드를 비활성화하는 검사가 포함되어 있습니다.
그러나 패턴 목록이 단일 파일 또는 디렉토리와 일치하려고 할 때(예: 다음과 같은 형식의 패턴) 이러한 경우에는 감지되지 않습니다.

/A/B/C

따라서 이러한 패턴이 스파스 체크아웃 파일에 있고 콘 모드가 활성화된 경우 스파스 체크아웃이 예기치 않은 동작을 보입니다.

패턴을 모드에서은 'non-con 모드은서에non-con 에다니 sparse-checkout에 할 것입니다./A/B/C'.
콘 하고 'forse-checkout에 있는 파일은 표시하지 ./A/B/C'.

하여, ' 와관련여로부하이복'로할 때 의 필터를 할 때 가 발생합니다.--filter=sparse:oid=<oid>'.
'upload-pack에서는 비모수 패턴 일치와 일치하는 개체만 올바르게 포함됩니다.
즉, 동일한 필터를 사용하지만 콘 모드를 사용하도록 설정한 상태에서 새로 복제된 repo를 체크아웃하면 개체가 누락되어 실패합니다.

하려면 모든 또는 ' 패턴하는 콘 패턴 검사를 합니다./*'.
새 패턴 검사를 확인하는 테스트를 추가하고 디렉터리가 아닌 패턴이 이전에 발견되었음을 반영하도록 다른 패턴 검사를 수정합니다.

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

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

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

cd the_repo
git checkout HEAD name_of_file

있는 , Gitrepo를 할 수 .git log해시 ID(예: 3/15724f9965575ba954c8cd4232c8b42e4)를 확인하고 다음을 입력합니다.

git checkout hash-id path-to-file

다음은 실제 예입니다.

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

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

그러나 특정 사례에 대한 몇 가지 해결 방법이 있습니다. 있래아제에 대한 자리 를 사용한 아래 :user,project,branch,filename.

깃헙

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

깃랩

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

깃웹

서버 - GitWeb에서 Git를 사용하는 경우 다음과 같이 시도할 수 있습니다(올바른 경로로 변경).

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

GitWeb(drupalcode.org )

예:

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

googlesource.com

문서화되지 않은 기능을 사용하여 기본 64 인코딩 버전의 원시 파일을 다운로드할 수 있습니다.

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)대안으로

최소 가이드

git checkout -- <filename>


참조: https://git-scm.com/docs/git-checkout

Dup: Git에서 한 파일의 작업 복사본 수정을 취소하시겠습니까?

git checkout branch_or_version -- 경로/파일

예:git checkout HEAD -- main.c

이제 할 수 있어요!이것이 구글의 첫 번째 결과이기 때문에, 저는 이것을 최신 스탠딩으로 업데이트해야겠다고 생각했습니다.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

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

GIT 1.7.2.2에서 작업

예를 들어 branch1, branch32가 있는 원격 some_remote가 있습니다.

특정 파일을 체크아웃하려면 다음 명령을 호출합니다.

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

블로그 게시물에서 저에게 이것을 가르쳐준 아리얀 드 브룸에게 보내는 모자 팁입니다.

git clone --filter 2.19Git 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 현재 서버 지원은 없지만 이미 로컬에서 테스트할 수 있습니다.

작업관리:--filter=blob:none모든 블롭을 건너뛰지만 모든 트리 개체를 가져옵니다.그러나 일반적인 레포에서는 파일 자체에 비해 이 크기가 작아야 하므로 이미 충분합니다.질문: https://www.spinics.net/lists/git/msg342006.html 에서 Devs는 다음과 같이 대답했습니다.--filter=tree:0그것을 하기 위한 작업 중입니다.

하세요.--depth 1 이미암고있는하시있을 암시합니다.--single-branch참고 항목:Git에서 단일 분기를 복제하려면 어떻게 해야 합니까?

file://$(path)를 극복하기 는 필요합니다.git clone프로토콜 셰니건:상대 경로를 사용하여 로컬 Git 저장소를 얕은 수준으로 복제하는 방법은 무엇입니까?

--filter에 문서화되어 있습니다.man git-rev-list.

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

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 업스트림.

Git 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/root그리고.mybranch/mybranch또한 누락되었지만,--depth 1누락된 파일 목록에서 이를 숨깁니다.을 하면,--depth 1그런 다음 누락된 파일 목록에 표시됩니다.

이미 제공된 내용에 대한 두 가지 변형:

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

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

당신은 할 수 있습니다.

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

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

git checkout --theirs  123.txt

파일이 디렉토리 A 내에 있으면 올바르게 지정해야 합니다.

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

업데이트하기 전에 파일을 '체크아웃'하지 않습니다. 이것이 바로 당신이 원하는 것처럼 보입니다.

clearcase, csv 등과 같은 많은 시스템에서는 파일을 변경하기 전에 파일을 '체크아웃'해야 합니다.Git에는 이것이 필요하지 않습니다.리포지토리를 복제한 다음 리포지토리의 로컬 복사본을 변경합니다.

파일을 업데이트한 후에는 다음 작업을 수행할 수 있습니다.

git status

수정된 파일을 확인합니다.커할항목추다니가합에 커밋할 합니다.index에 (로index체크인할 목록과 같습니다.):

git add .

또는

git add blah.c

그럼하라.git status됩니다.index커밋하거나 체크인할 준비가 되었습니다.

저장소 복사본에 파일을 커밋하려면 다음을 수행합니다.

git commit -a -m "commit message here"

설명서 및 가이드에 대한 링크는 웹 사이트를 참조하십시오.

원격 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 -

이것은 나에게 효과가 있습니다.git를 shell 명령어와 함께 사용합니다.

git clone --no-checkout --depth 1 git.example.com/project.git && cd project && git show HEAD:path/to/file_you_need > ../file_you_need && cd .. && rm -rf project

사용하는 솔루션과 유사한 다른 솔루션--filter=blob:none사용하는 것입니다.--filter=tree:0(여기에서 차이점에 대한 설명을 읽을 수 있습니다.)

이 방법은 일반적으로 보다 빠릅니다.blob-하나는 트리 구조를 다운로드하지 않지만 단점이 있기 때문입니다.트리 검색을 지연하는 경우 repo 디렉토리에 들어갈 때 패널티가 발생합니다(리포트의 크기 및 구조에 따라 단순한 얕은 클론에 비해 몇 배 더 클 수 있음).

이 경우 보고서에 입력하지 않고 수정할 수 있습니다.

git clone -n --filter=tree:0 <repo_url> tgt_dir
git -C tgt_dir checkout <branch> -- <filename>
cat tgt_dir/<filename> # or move it to another place and delete tgt_dir ;)

여러 개의 파일을 체크아웃해야 하는 경우 트리 구성도 성능에 영향을 미치므로, 단일 파일에 대해 이 작업을 수행할 가치가 충분히 있는 리포인 경우에만 이 작업을 수행하는 것이 좋습니다.

마치 중앙 집중식 버전 관리에서 아이디어를 이어가려는 것처럼 들리지만, 본질적으로 Git은 분산되어 있지 않습니다.Git 저장소로 작업하려면 Git 저장소를 복제합니다.그러면 단일 파일이나 단일 커밋의 스냅샷뿐만 아니라 워크 트리의 모든 내용과 모든 기록(최소한 현재 분기의 끝까지 이어지는 모든 내용)을 볼 수 있습니다.

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

저는 공식적인 체크아웃이나 유사한 현지 작업에 대한 대안으로 이 답변을 추가합니다.Git 공급자의 웹 인터페이스에 액세스할 수 있다고 가정하면 원하는 커밋에서 모든 파일을 직접 볼 수 있습니다.예를 들어 GitHub에서 다음과 같은 것을 사용할 수 있습니다.

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

여기서ed25584f는 Commit of Interest의 SHA-1 해시에서 처음 8자이고 그 다음에 원본 파일의 경로가 나옵니다.

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

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

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

codecommit) 할 수

aws codecommit \
  get-file --repository-name myrepo \
  --commit-specifier master \
  --file-path path/myfile \
  --output text \
  --query fileContent | 
base64 --decode > myfile

여기 나열된 목록에 제게 어떤 것이 효과가 있었는지 알 수 없으므로 제 상황에 해당하는 사람이 있을 경우 포함하겠습니다.

제 상황은 약 10,000개의 파일이 있는 원격 저장소를 가지고 있으며 Linux 시스템용 RPM 파일을 구축해야 합니다.RPM의 빌드에는 모든 것의 깃 클론이 포함됩니다.RPM 빌드를 시작하려면 파일 하나만 있으면 됩니다.필요한 작업을 수행하는 전체 소스 트리를 복제할 수 있지만 필요한 파일이 하나뿐인 경우 다운로드하는 데 2분이 더 걸립니다.논의된 Git Archive 옵션을 사용하려고 했지만 "치명적인" 결과를 얻었습니다.프로토콜에서 지원되지 않는 작업입니다."서버에서 일종의 아카이브 옵션을 활성화해야 하는 것 같습니다. 그리고 제 서버는 관료적인 폭력배들에 의해 관리되고 있습니다. 이들은 일을 하는 것을 즐기는 것 같습니다.

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

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

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

먼저 로그인해야 하기 때문에 비트 버킷 저장소에서 이 파일을 직접 다운로드할 수 없습니다.좀 더 연구한 후에, 저는 이것이 효과가 있다는 것을 발견했습니다: Linux:

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

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

만약 당신이 파일을 가지고 있다면, 로컬로 변경된 것.git pull.

git checkout origin/master filename
  1. git checkout파일을 하지 않고 만 덮어씁니다.)
  2. origin/master 또는 지점을 할 수 .revision-number 예:cd0fa799c582e94e59e5b21e872f5ffe2ad0154b,
  3. directory의 (서 directory 프로트여기경있의로파는이름일가디리렉터서기리본터디젝렉여▁with▁filename)▁from▁(디▁directory).git생명) 그래서 구조가 있다면:

''.git

공공/인덱스

대중적인/풍자적인/풍자적인

판매업자들

composer.lock'

- "reload index."를 사용합니다.public/index.html

예, 특정 파일 하나를 다운로드하는 이 명령으로 이 작업을 수행할 수 있습니다.

wget -o <DesiredFileName>  <Git FilePath>\?token\=<personalGitToken>

wget -o javascript-test-automation.md https://github.com/akashgupta03/awesome-test-automation/blob/master/javascript-test-automation.md\?token\=<githubPersonalTone>

git checkout <other-branch> -- <single-file>git.2.37.1에서 작동합니다.
그러나 파일이 커밋을 위해 (git-magic하게) 준비되어 있고 볼 수 없습니다.git diff적절히.
나는 그 다음에 달립니다.git restore --staged db/structure.sql그것을 해체하기 위해.

이렇게 하면 원하는 버전의 파일이 있고 해당 파일의 다른 버전과의 차이점을 확인할 수 있습니다.

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

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

진정!

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

GitHub Mate는 Chrome 확장자이며 파일 아이콘을 클릭하여 다운로드할 수 있습니다. 또한 오픈 소스

언급URL : https://stackoverflow.com/questions/2466735/how-to-sparsely-checkout-only-one-single-file-from-a-git-repository

반응형