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


当前回答

通常不可能像第一个回答中建议的那样,只从git下载一个文件,而不下载整个存储库。 这是因为Git不像您想象的那样存储文件(像CVS/SVN那样),而是根据项目的整个历史生成文件。

但在特定情况下有一些变通办法。下面的例子为用户、项目、分支和文件名设置了占位符。

GitHub

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

GitLab

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

GitWeb

如果你在服务器上使用Git - GitWeb,那么你可以在示例中尝试(将其更改为正确的路径):

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

有一个未记录的特性允许你下载base64编码的原始文件版本:

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

在其他情况下,检查Git存储库是否使用任何web界面。

如果它不使用任何web界面,你可以考虑将你的代码推送到外部服务,如GitHub, Bitbucket等,并将其用作镜像。

如果你没有安装wget,试试curl -O (url)。

其他回答

在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扩展轻松实现。

最初文件将被标记为提交,因为它已被修改 在文件树菜单中选择(双击)该文件 列出了单个文件的修订树。 选择树的顶部/HEAD,然后右键单击save as 保存该文件以覆盖修改后的文件本地版本 文件现在有正确的版本,将不再被标记为提交!

简单!

这里是一个完整的解决方案,只拉和推一个特定的文件在git仓库:

首先,你需要克隆git存储库,并给出一个特殊提示——不签出

git clone --no-checkout <git url>

下一步是用下面的命令清除索引中的非暂存文件:

git reset

现在你可以开始拉出你想要修改的文件了:

git checkout origin/master <path to file>

现在,存储库文件夹包含您可以立即开始编辑的文件。编辑完成后,您需要执行简单而熟悉的命令序列。

git add <path to file>
git commit -m <message text>
git push

说文件名是123.txt,这对我来说是有效的:

git checkout --theirs  123.txt

如果文件在目录a中,请确保正确地指定它:

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

是的,你可以通过这个命令下载一个特定的文件

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>