我的目标是将我的存储库的分支的最新版本的副本克隆/拉出到我的测试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方法检索子文件夹。所以...我想回到我最初做的方式。
答案 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
是用新的文件/文件夹替换当前文件/文件夹。当然这意味着我正在替换所有内容而不是增量更新,但是...权衡? ¯\ _(ツ)_ /¯