Git pull/clone 分支到没有历史记录的 Web 服务器

Git pull/clone branch to web server without history

我的目标是 clone/pull/whatever 我的存储库 分支 的最新版本的副本到我的测试 Web 服务器,以便在生产前进行测试。

注意:我知道这里有很多类似的问题,但我调查的问题与我的情况有很大不同,我仍然有点困惑。

我不太精通git命令行(我倾向于使用GUI工具),所以我不确定我是否有这个权利。到目前为止,我所做的一切都有效,但最初的吸引力似乎很大,所以我想知道我是在获取整个历史记录,还是只获取最新版本。

我不想在服务器上进行实时更改或推回原点。这只需要是一条单行道。

假设我有一个名为 test 的分支,我将把它加载到测试 Web 服务器上。但是,我们不想要存储库的根目录,因为那里有些杂物。我们只想要 /sub 目录和下面的所有内容。我服务器上的初始设置:

$ cd ~/webapps/test_dir
$ git init
$ git remote add origin https://github.com/user/repository.git
$ git config core.sparseCheckout true
$ echo "sub/*" >> .git/info/sparse-checkout

然后每次我想更新服务器上的代码时,我都会这样 运行:

$ git pull --depth=1 origin test

这个命令是否正确,用 最新代码替换服务器上的内容,没有历史记录?有没有更高效的命令来完成我想要的?

更新

鉴于 Github 缺乏对 git archive 的支持(这似乎是另一种方式),我正在尝试制定解决方案 getting an archive using their APIv3,他们在支持电子邮件回复中提出了建议。

我已经下载了我的存储库正确分支的存档:

$ curl -L --user "username" https://api.github.com/repos/<username>/<reponame>/tarball/<branchname> > example.tar.gz

但这让我从分支的根部得到了一切。我真正想要的只是一个子文件夹,但我还没有弄清楚如何过滤它。

更新更新

从 GitHub 那里得到确认,无法通过此 API 方法检索子文件夹。所以……回到我最初做这件事的方式,我想。

您可能要考虑使用 git archive 而不是拉取来呈现没有附加历史记录的数据。该命令的正式文档位于 https://git-scm.com/docs/git-archive.

类似git archive branchname | tar xf -的东西应该可以将相关分支头部的提交转储到本地目录。

如果您想将导出的位放入子目录,可以使用类似 git archive foo --prefix branch/ | tar xf - 的东西,这会将分支 foo 的 HEAD 中的所有提交放入目录 branch.您还可以重定向 tar 命令以将其移动到其他地方 - 但由于您在 git 征募的目录中,因此第一部分的本地目录仍将有一个 .git 在里面。

参考 this answer by Anthony Hatzopoulos,似乎最好的方法可能是利用 GitHub 的 Subversion 兼容性,然后这样做:

$ svn export --force https://github.com/<user>/<repo>/branches/<branch>/<subfolder>

完全符合我的要求,没有任何麻烦。

--force 是用新的 files/folders 替换任何当前的 files/folders。当然,这意味着我要替换所有内容而不是增量更新,但是……权衡? ¯\_(ツ)_/¯