git pull 更改到特定目录

问题描述

我正在准备一个部署自动化脚本,用于在 Linux 系统中部署 Drupal 项目。在 Staging 分支是“Master”,我想将“Release”分支的所有最新更改拉到特定目录,并且我想将更改同步到我的 Web 目录。我正在尝试使用以下命令:

git -C /var/tmp/staging_12.21 pull

此命令不会将更改的文件拉入 /var/tmp/staging_12.21 文件夹,而是直接更新 .git 文件。有没有办法只将最新更改的文件下载/拉入特定目录? staging_12.21 也是一个文件夹。

解决方法

您正尝试将 Git 用作部署系统和版本控制系统。它不是一个部署系统,所以这通常不能很好地工作。它作为版本控制系统运行良好。

有没有办法只下载/拉取最新更改的文件...

不使用 Git,不。 Git 的版本控制适用于提交,而不是文件。 git fetch 命令下载新的提交git mergegit rebase 命令将新提交合并到一些现有存储库中,git pull 命令是一个方便的命令,它首先运行 git fetch,然后运行 ​​git mergegit rebase(取决于您如何指示)将新提交与您自己的工作结合起来。 (如果您不是在做自己的工作,可以将其压入服务作为一个穷人的部署系统,尽管这绝对是矫枉过正,可能不是一个好主意。)

还有 staging_12.21 是一个空文件夹。

空文件夹不是特别有用,除非可能作为诸如“从提交中提取部分或全部文件”之类的操作的容器。请记住,提交是一个由两部分组成的实体,包括:

  • 所有文件的(压缩和只读)快照,截至提交时的状态;和
  • 关于提交的元数据,例如提交的人、时间以及某些较早提交的哈希ID。

因为提交是所有文件的快照,所以总是可以从该提交中提取部分或全部文件(如果有的话)。

因为提交是一个快照,它没有“更改”。 (练习:here is a photo of Paris in 1920。点击它,看一看,告诉我发生了什么变化。我还需要给你什么其他信息?我什至在第一个中的改变是什么意思?地方?我是说自 1919 年以来吗?)

如果你有一个完整的存储库,根据定义它有每个快照,并且你知道你在某个位置部署了哪个快照,你可以使用 Git 来比较部署的快照与其他一些快照。这将为您提供所需的信息。您可以使用它来构建已更改文件的列表,然后从您想要部署的快照中提取这些文件。请注意,您需要知道当前部署了哪个提交,并且部署的内容最好与该提交实际匹配。提取整个提交并从中进行全新部署可能更简单。