Git:如何在Git中从服务器仓库拉取单个文件?

avwztpqn  于 2023-01-01  发布在  Git
关注(0)|答案(9)|浏览(363)

我正在一个服务器运行Git的网站上工作。我正在使用Git进行部署(不是GitHub)。这是在我使用hook method之前设置的,我引用了this question并输入了下面的命令,但它不起作用。
我如何从服务器上拉取一个文件?例如,如果我想更新我的本地文件index.php?git pull index.php

yhxst69z

yhxst69z1#

简短回答

可以执行以下操作(在部署的存储库中):

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
5jvtdoz2

5jvtdoz22#

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

这是假设您正在从原始/主文件中提取文件。

xsuvu9jc

xsuvu9jc3#

这可能是解决方案:

git fetch

git checkout origin/master -- FolderPathName/fileName

谢谢。

gk7wooem

gk7wooem4#

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

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/to,把FILE_NAME设置为file.xz,所以你会得到这样的结果

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

当然,除了tar xO之外,没有人会阻止你进行任何其他形式的开箱(是的,是我需要一根管子)。

wd2eg0qa

wd2eg0qa5#

当您--或者比您更强大的力量--在本地存储库中损坏了一个文件,而您只想从存储库中恢复该文件的最新版本时,就会出现这种情况。简单地使用/bin/rm(而不是git rm)删除该文件,或者重命名/隐藏该文件,然后发出git pull命令是行不通的:git会注意到文件的缺失,并假设您可能希望它从repo中消失(git diff会显示从缺失文件中删除的所有行)。
git pull不能恢复本地丢失的文件一直让我对git感到沮丧,也许是因为我受到了其他版本控制系统的影响(例如svn update,我相信它 * 会 * 恢复本地隐藏的文件)。
git reset --hard HEAD是一种恢复感兴趣的文件的替代方法,因为它会丢弃所有未提交的更改。但是,如here所述,如果您有任何其他您关心的未提交更改,git reset是一个潜在的危险命令。
@chrismillah上面提到的git fetch ... git checkout策略是恢复有问题的文件的一种很好的外科手术式方法。

yks3o0rb

yks3o0rb6#

尝试使用:

git checkout branchName -- fileName

例如:

git checkout master -- index.php
hpcdzsge

hpcdzsge7#

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

例如https://raw.githubusercontent.com/vipinbihari/apana-result/master/index.php
通过这个你可以得到一个单独文件的内容作为一行文本。你可以用wget下载这个文本。
例如https://raw.githubusercontent.com/vipinbihari/apana-result/master/index.php

w9apscun

w9apscun8#

无论是否在GitHub上,这个Windows批处理都能正常工作。我之所以使用它,是因为它显示了一些明显的警告。您会注意到,该操作速度很慢,并且会遍历数百兆字节的数据,因此如果您的要求基于可用带宽/读写内存,请不要使用此方法。

    • 稀疏 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:\用户\用户名\桌面〉sparse_checkout. bat
C:\用户\用户名\桌面〉推送"C:\用户\用户名\桌面"
C:\用户\用户名\桌面〉如果不存在。\ms-server-essentials-docs mkdir.\ms-server-essentials-docs
C:\用户\用户名\桌面〉pushd.\ms-server-essential-docs
C:\用户\用户名\桌面\ms-server-essentials-docs〉git init初始化C:/用户/用户名/桌面/ms-server-essentials-docs/. git/中的空Git存储库
C:\用户\用户名\桌面\ms-server-essentials-docs〉git远程添加源-f https://github.com/MicrosoftDocs/windowsserverdocs.git正在更新源远程:正在枚举对象:97,完成。遥控:计数对象:100%(97/97),完成。罕见:压缩对象:100%(44/44),完成。罕见:总计145517(增量63),重用76(增量53),包重用145420接收对象:100%(145517/145517),751.33百万兆字节|32.06 MiB/s,完成。正在解析增量:100%(102110/102110),已完成。来自https://github.com/MicrosoftDocs/windowsserverdocs *[新分支]
1106-冲突-〉来源/1106-冲突 *[新分支]
来自私有回购-〉来源/来自私有回购 *[新分行]
PR183-〉原产地/PR183 *[新分支机构]
冲突修复-〉来源/冲突修复 *[新分支]
eross-msft-修补程序-1-〉源/eross-msft-修补程序-1 *[新分支]
主文件-〉原始文件/主文件 *[新分支]修补程序-1

  • 〉原始/修补程序-1 *[新分支]存储库同步工作分支-〉原始/存储库同步工作分支 *[新分支]
    小块补丁-1-〉原点/小块补丁-1 *[新分支]
    短模式-补丁-2-〉来源/短模式-补丁-2 *[新分支]
    小补丁-3-〉原点/小补丁-3 *[新分支]
    小补丁-4-〉原点/小补丁-4 *[新分支]
    小补丁-5-〉原点/小补丁-5 *[新分支]
    小补丁-6-〉原点/小补丁-6 *[新分支]
    7-〉来源/7 *[新分支]
    短模式-修补程序-8-〉原点/短模式-修补程序-8
    C:\用户\用户名\桌面\ms-server-essentials-docs〉git配置核心. sparseCheckout为真
    C:\用户\用户名\桌面\ms-server-essentials-docs〉(echo essentialsDocs)1〉〉. git\信息\稀疏 checkout
    C:\用户\用户名\桌面\ms-server-essentials-docs〉git拉取源主机
    https://github.com/MicrosoftDocs/windowsserverdocs开始
  • 分支主机-〉FETCH_HEAD
j0pj023g

j0pj023g9#

只需执行git checkout / -- path/to/file即可
例如:x1月1x

相关问题