Git: 如何在 Git 中从服务器存储库中提取单个文件?

我工作在一个网站与服务器运行 Git。我使用 Git 进行部署(不是 GitHub)。这是在我使用 挂钩法挂钩法之前设置的,我引用了 这个问题并输入了下面的命令,但是它没有工作。

如何从服务器中提取单个文件?例如,如果我想更新我的本地文件 index.php?git pull index.php

387403 次浏览

简短的回答

可以这样做(在已部署的存储库中) :

git fetch --all
// 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 <local repo name (default is origin)>/<branch name> -- path/to/file will checkout the particular file from the downloaded changes (origin/master).

完整例子

$ cd /project/directory


$ git branch
* develop

检查远程名称

$ git remote -v
origin git@github.com:abc/123.git

确认是 origin

我在 develop分支上,需要从 main分支上获得一个文件

我需要的文件是 src/scss/main.scss

git fetch --all
git checkout origin/main -- src/scss/main.scss
git fetch --all
git checkout origin/master -- <your_file_path>
git add <your_file_path>
git commit -m "<your_file_name> updated"

这是在假设您从 source/master 中提取文件的情况下进行的。

尝试使用:

git checkout branchName -- fileName

例如:

git checkout master -- index.php

这种情况出现时,您-或力量大于您-有 弄坏了一个文件在您的本地回购,您只是想恢复一个新的副本的最新版本的回购。简单地用/bin/rm (不是 git rm)删除文件或者重命名/隐藏它,然后发出 git pull是不行的: git 会注意到文件的缺失,并假设您可能希望它从回购文件中消失(git diff会显示从缺失文件中删除的所有行)。

git pull不能恢复本地丢失的文件总是让我对 git 感到沮丧,可能是因为我受到了其他版本控制系统的影响(例如 Svn 更新,我认为 威尔恢复本地隐藏的文件)。

git reset --hard HEAD是恢复感兴趣的文件的另一种方法,因为它会丢弃任何未提交的更改。但是,正如前面提到的 给你,如果您有任何其他您关心的未提交更改,那么 git 复位是一个潜在的危险命令。

上面@chrismillah 提到的 git fetch ... git checkout策略是一个很好的手术方式来恢复有问题的文件。

这可能是解决办法:

git fetch


git checkout origin/master -- FolderPathName/fileName

谢谢。

https://raw.githubusercontent.com/[USER-NAME]/[REPOSITORY-NAME]/[BRANCH-NAME]/[FILE-PATH]

前任

通过这种方式,您将获得作为一行的单个文件的内容 你可以用 wget 下载文本。

前任

不管是否在 GitHub 上,这个 windows 批处理都能正常工作。我用它是因为它显示了一些严格的警告。因此,如果您的需求是基于可用带宽/R-W 内存,则不要使用此方法。

Sparse _ checkout.bat

pushd "%~dp0"
if not exist .\ms-server-essentials-docs mkdir .\ms-server-essentials-docs
pushd .\ms-server-essentials-docs
git init
git remote add origin -f https://github.com/MicrosoftDocs/windowsserverdocs.git
git config core.sparseCheckout true
(echo EssentialsDocs)>>.git\info\sparse-checkout
git pull origin master

=>

C: 用户用户名 Desktop > Sparse _ checkout. bat

C: Users user name Desktop > pushd“ C: Users user name Desktop”

C: 用户用户名 Desktop > (如果不存在) Ms-服务器-基本要素-文档

C: 用户用户名 Desktop > pushd.ms-server-essals-docs

C: 用户用户名 Desktop ms-server-essals-docs > git init 在 C:/Users/user 中初始化空 Git 存储库 Name/Desktop/ms-server-essals-docs/. git/

C: 用户用户名 Desktop ms-server-essals-docs > git remote add 原点-f https://github.com/MicrosoftDocs/windowsserverdocs.git 更新源远程: 枚举对象: 97,done. remote: 计数对象: 100% (97/97) ,完成: 100% (44/44) ,完成。 remote: Total 145517(delta 63) ,重用76(delta 接收对象: 100% (145517/145517) , 751.33 MiB | 32.06 MiB/s,完成。解析 delta: 100% (102110/102110) ,完成 Https://github.com/microsoftdocs/windowsserverdocs 〔新分行〕
1106-冲突-> 起源/1106-冲突 * [新分支]
FromPrivateRepo-> 原产地/FromPrivateRepo * [新分行]
PR183-> 原产地/PR183 * 〔新分行〕
间断冲突-> 原点/间断冲突 * [新分支]
Eross-msft-patch-1-> source/eross-msft-patch-1 * [新分行]
主-> 原产地/主 * 〔新分公司〕补丁 -1
- > source/patch-1 * [新分支] repo _ sync _ working _ Branch-> source/repo _ sync _ working _ Branch * [新分支]
Short patti-patch-1-> source/short patti-patch-1 * [新分支]
Short patti-patch-2-> source/short patti-patch-2 * [ New Branch ]
Short patti-patch-3-> source/short patti-patch-3 * [ New Branch ]
Short patti-patch-4-> source/short patti-patch-4 * [ New Branch ]
Short patti-patch-5-> source/short patti-patch-5 * [ New Branch ]
Short patti-patch-6-> source/short patti-patch-6 * [新分支]
Short patti-patch-7-> source/short patti-patch-7 * [ New Branch ]
Shorpatti-patch-8-> source/short patti-patch-8

C: 用户用户名 Desktop ms-server-essals-docs > git config Core SparseCheckout true

C: 用户用户名 Desktop ms-server-essals-docs > (echo 1 > > . git info Sparse-checkout

C: 用户用户名 Desktop ms-server-essals-docs > git pull source 师父
来自
https://github.com/MicrosoftDocs/windowsserverdocs
* 分部主管-> FETCH _ HEAD

我在找一个稍微不同的任务,但是这个看起来像你想要的:

git archive --remote=$REPO_URL HEAD:$DIR_NAME -- $FILE_NAME |
tar xO > /where/you/want/to/have.it

我的意思是,如果你想获取 path/to/file.xz,你将 DIR_NAME设置为 path/toFILE_NAME设置为 file.xz。 所以,你最终会得到

git archive --remote=$REPO_URL HEAD:path/to -- file.xz |
tar xO > /where/you/want/to/have.it

而且没有人阻止你从任何其他形式的解包而不是 tar xO当然(这是我谁需要一个管道在这里,是的)。