我如何从一个git回购签出一个文件?


当前回答

在codecommit (git版本的Amazon AWS)中,你可以这样做:

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

其他回答

你可以通过

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"

我没有看到在这里列出的对我有用的东西,所以我将包括它,如果有人在我的情况下。

My situation, I have a remote repository of maybe 10,000 files and I need to build an RPM file for my Linux system. The build of the RPM includes a git clone of everything. All I need is one file to start the RPM build. I can clone the entire source tree which does what I need but it takes an extra two minutes to download all those files when all I need is one. I tried to use the git archive option discussed and I got “fatal: Operation not supported by protocol.” It seems I have to get some sort of archive option enabled on the server and my server is maintained by bureaucratic thugs that seem to enjoy making it difficult to get things done.

最后我进入了bitbucket的网页界面,看到了我需要的一个文件。我右键点击链接下载文件的原始副本,并从弹出的结果中选择“复制快捷方式”。我不能只是下载原始文件,因为我需要自动化操作,而且我的Linux服务器上没有浏览器界面。

为了便于讨论,结果是URL:

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

我不能直接从bitbucket存储库下载这个文件,因为我需要先登录。经过一番挖掘,我发现这个方法有效: 在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 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 init)

我添加这个答案作为做正式签出或一些类似的本地操作的替代方案。假设您可以访问Git提供程序的web界面,您可能能够在给定的提交时直接查看任何文件。例如,在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的末尾。