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

时间:2017-04-23 23:03:13

标签: git web-deployment github-api pull

我的目标是将我的存储库的分支的最新版本的副本克隆/拉出到我的测试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方法检索子文件夹。所以...我想回到我最初做的方式。

2 个答案:

答案 0 :(得分:1)

您可能希望考虑使用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。

答案 1 :(得分:0)

引用this answer by Anthony Hatzopoulos,似乎最好的方法是利用GitHub的Subversion兼容性,并执行此操作:

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

正是我想要它做的,没有任何瑕疵。

--force是用新的文件/文件夹替换当前文件/文件夹。当然这意味着我正在替换所有内容而不是增量更新,但是...权衡? ¯\ _(ツ)_ /¯