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


114

我正在使用运行Git的服务器的站点上工作。我正在使用Git进行部署(不是GitHub)。这是在我参与之前使用钩子方法设置的,我提到了这个问题并在下面输入了命令,但是没有用。

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



Answers:


194

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

git fetch
// 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).

1
谢谢。那是什么意思<revision>呢?文件名?如果我的文件是在根目录将意味着我必须键入:git checkout -m index.php index.php
vsvs 2015年

谢谢你的解释。
vsvs 2015年

是否一定要*origin*/master或者可以从任何远程存在?整个历史记录都存储在我的存储库中了吗,或者该文件似乎看起来很神奇?
BernhardDöbler17年

如果出现此错误“与git已知的文件不匹配”:“ path / to / file”不应是从GitHub上的文件位置获取的路径的副本,即“ repoName / fileName” ,您应该删除“ repoName /”,然后它将起作用。
爱德华

1
@BernhardDöbler它可以是远程的任何分支:)
chrismillah

27
git fetch --all
git checkout origin/master -- <your_file_path>
git add <your_file_path>
git commit -m "<your_file_name> updated"

这是假设您要从原始/母版中拉出文件。


13

这可以是解决方案:

git fetch

git checkout origin/master -- FolderPathName/fileName

谢谢。


5

当您-或比您更大的力量- 破坏了本地存储库中的文件,而您只想从该存储库中还原该文件的最新版本时,就会出现这种情况。只需使用/ bin / rm(不是git rm)删除文件或重命名/隐藏文件,然后发出a git pull将不起作用:git会注意到该文件不存在,并假定您可能希望将其从存储库中git diff删除(将显示从缺少文件)。

git pull不恢复本地丢失的文件一直让我对git感到沮丧,也许是因为我受到了其他版本控制系统的影响(例如svn update,我相信它将恢复本地隐藏的文件)。

git reset --hard HEAD是一种还原感兴趣文件的替代方法,因为它会丢弃您所做的所有未提交的更改。然而,如前所述这里,git的复位是具有潜在危险的命令,如果你有你关心其他任何未提交的更改。

git fetch ... git checkout@chrismillah上面提到的策略是一种还原相关文件的好方法。


1
比别人的评论要复杂得多。谢谢
Thecave3

3

我正在寻找略有不同的任务,但这看起来像您想要的:

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

我的意思是,如果你想获取path/to/file.xz,您将设置DIR_NAMEpath/toFILE_NAMEfile.xz。因此,您最终会得到类似

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

没有人会阻止您打开其他任何形式的包装,而不是(tar xO当然,是我在这里需要管道)。




0

无论是否在GitHub上,此Windows批处理均有效。我正在使用它,因为它显示出一些明显的警告。您会注意到操作速度很慢,并且遍历了数百兆的数据,因此,如果您的要求基于可用的带宽/ RW内存,则不要使用此方法。

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:\ Users \用户名\ Desktop> sparse_checkout.bat

C:\ Users \用户名\ Desktop>按“ C:\ Users \用户名\ Desktop \”

C:\ Users \用户名\ Desktop>如果不存在。\ ms-server-essentials-docs mkdir。\ ms-server-essentials-docs

C:\ Users \用户名\ Desktop> pushd。\ ms-server-essentials-docs

C:\ Users \用户名\ Desktop \ ms-server-essentials-docs> git init在C:/ Users /用户名/Desktop/ms-server-essentials-docs/.git/中初始化了空的Git存储库

C:\ Users \用户名\ Desktop \ ms-server-essentials-docs> git remote add origin -f https://github.com/MicrosoftDocs/windowsserverdocs.git 更新源远程:枚举对象:97,已完成。远程:计数对象:100%(97/97),已完成。远程:压缩对象:100%(44/44),已完成。远程:总计145517(增量63),已重用76(增量53),已重复使用包装145420接收对象:100%(145517/145517),751.33 MiB | 已完成32.06 MiB / s。解析增量:已完成100%(102110/102110)。来自 https://github.com/MicrosoftDocs/windowsserverdocs * [新分支] 1106-
冲突
-> origin / 1106- 冲突* [新分支] FromPrivateRepo-> origin / FromPrivateRepo * [新分支]
PR183-> origin / PR183 * [新分支]
冲突修正->原点/冲突
修正* [新分支] eross-msft-patch-1->原点/ eross-msft-patch-1 * [新分支]
主节点->原始/主节点* [新分支]补丁1-
> origin / patch-1 * [新分支] repo_sync_working_branch-> origin / repo_sync_working_branch * [新分支] shortpatti
-patch-1-> Origin / shortpatti -patch-1 * [new branch]
shortpatti-patch-2-> origin / shortpatti -patch-2 * [新分支]
shortpatti-patch-3-> origin / shortpatti-patch-3 * [新分支]
shortpatti-patch-4-> origin / shortpatti-patch-4 * [新分支]
shortpatti-patch -5-> origin / shortpatti-patch-5 * [新分支]
shortpatti-patch-6-> origin / shortpatti-patch-6 * [新分支]
shortpatti-patch-7-> origin / shortpatti-patch-7 * [新分支]
shortpatti-patch-8-> origin / shortpatti-patch-8

C:\ Users \用户名\ Desktop \ ms-server-essentials-docs> git config core.sparseCheckout true

C:\ Users \用户名\ Desktop \ ms-server-essentials-docs>(echo EssentialsDocs)1 >>。git \ info \ sparse-checkout

C:\ Users \用户名\ Desktop \ ms-server-essentials-docs> git pull origin master
https://github.com/MicrosoftDocs/windowsserverdocs
*分支master-> FETCH_HEAD

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.