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

vsv*_*svs 93 git git-pull git-merge git-fetch

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

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

chr*_*lah 149

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

git fetch
// git fetch will download all the recent changes, but it will not put it in your current checked out code (working area).
Run Code Online (Sandbox Code Playgroud)

其次是:

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).
Run Code Online (Sandbox Code Playgroud)


OYO*_*ORF 21

git fetch --all
git checkout origin/master -- <your_file_path>
git add <your_file_path>
git commit -m "<your_file_name> updated"
Run Code Online (Sandbox Code Playgroud)

这是假设您从origin/master中提取文件.


Y. *_*gha 9

这可以是解决方案:

git fetch

git checkout origin/master -- FolderPathName/fileName
Run Code Online (Sandbox Code Playgroud)

谢谢。


jno*_*jno 8

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

git archive --remote=$REPO_URL HEAD:$DIR_NAME -- $FILE_NAME |
tar xO > /where/you/want/to/have.it
Run Code Online (Sandbox Code Playgroud)

我的意思是,如果你想获取path/to/file.xz,你将设置DIR_NAMEpath/toFILE_NAMEto file.xz。所以,你最终会得到类似的东西

git archive --remote=$REPO_URL HEAD:path/to -- file.xz |
tar xO > /where/you/want/to/have.it
Run Code Online (Sandbox Code Playgroud)

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


Tru*_*ane 5

当您 - 或者比您更强大的力量 -在您的本地存储库中损坏了一个文件并且您只想从存储库中恢复它的最新版本的新副本时,就会出现这种情况。简单地用 /bin/rm (不是 git rm)删除文件或重命名/隐藏它然后发出一个git pull将不起作用:git 注意到文件不存在并假设您可能希望它从 repo 中消失(git diff将显示从文件丢失)。

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

git reset --hard HEAD是恢复感兴趣文件的另一种方法,因为它会丢弃您拥有的任何未提交的更改。但是,正如此处所述,如果您有任何其他您关心的未提交更改,则 git reset 是一个潜在的危险命令。

git fetch ... git checkout@chrismillah 上面提到的策略是恢复相关文件的一种很好的手术方式。