【发布时间】:2013-10-20 06:36:28
【问题描述】:
tl;博士
我想要的是一种整洁的方式,可以将代码从我的 Web 服务器推送到远程存储库中的孤立分支,之后无需在 Web 服务器上留下任何 Git 存储库,也无需先将整个远程存储库克隆到 Web 服务器上。我还需要在 Web 服务器上保留当前未版本化的文件。
编辑: 澄清一下,我不是在寻求一种方法来设置部署或任何类似的东西,我已经有了它的工作。我只需要一种方法将现有代码从非版本化目录整齐地推送到远程存储库中的新孤立分支,而不会弄乱网络服务器上的文件,也不会留下任何 .git 文件。
背景资料
我最近进入了使用 Git 对我的所有网站进行版本控制的趋势。它似乎比 FTP 容易得多,并且允许在具有完整历史和修订的团队中工作。我正在完成将所有内容导入 Git 存储库的过程,但遇到了一些问题。
我有一个项目,它将有多个(孤立)分支,代表代码的不同部署目标。出于这个问题的目的,这就是我的设置:
我有 3 台服务器。两个是 Web 服务器,一个是混合 Web-Git 服务器。
其中一个 Web 服务器是一个小型 VM,用作 Cloudflare 的 CDN 后端。它运行一个 nginx 服务器,只需向 Cloudflare 提供一次或两次更改或新文件以进行缓存(它很小,因为 Cloudflare 只请求一次文件,这意味着它不处理大量请求)。
我的第二个 Web 服务器托管实际网站并包含应用程序的整个服务器后端。
出于说明目的,两个 Web 服务器都是独立的机器。第三台机器只是 Git 服务器,托管着一堆 Atlassian 应用程序。
我还有一个以前的 SVN 存储库,其中包含与项目相关的服务器的 C# 源代码。
问题
我已将现有的 SVN 存储库导入 Git 存储库的“主”。我现在想创建 2 个孤立分支,一个用于 CDN 文件,一个用于网站文件。
经过一些研究,我遇到了这样的事情:git checkout --orphan <branchname>。这就是我的问题所在。我想创建一个分支来推送 CDN 等代码,然后从当前的 Web 服务器推送代码,而无需克隆整个存储库。因为git checkout 需要一个现有的 git repo 在工作目录中,所以我不知道该怎么做。我尝试git init-ing 我的文件所在的目录,在本地创建一个新分支,提交它们,然后使用git push git@mydomain.com:me/the_repo +local_branch:cdn_branch 将它们推送到远程分支,但这不起作用,并在我的 Web 服务器中留下了一个 Git 存储库 WWW文件夹。
【问题讨论】:
-
我感到困惑的是为什么选择使用孤儿分支。从我在 Git 发布周期流程中看到的情况来看,一个人标记了一个分支,然后发布了该标记。如果您有多个需要特殊处理的目录,那么您将拥有多个 Git 存储库。此外,将源代码放在源代码控制中也没有什么坏处,因为您总是可以返回到旧版本。标签对您来说不是一个可行的选择吗?
-
@Makoto 如果你指的是我要求在你说:“在源代码管理中拥有源代码没有害处”之后不要留下 Git 存储库,我的意思是我有一种单独的方式来 VHosting 我的 repos,这样 repo 实际上不在我的 /var/www 文件夹中。我所有的代码目前都在那里,所以我需要一种方法来进行“路过”推送,而不会留下回购。
-
@Makoto 我们选择孤儿分支的原因是它可以让我们更轻松地跟踪项目。将来我们可能会为每个部分采用单独的 repo 的方式,但现在它使我们的 Git 主机更整洁地使用分支。此外,我当前的部署脚本基于分支工作,因此使用孤儿比重写我的脚本更容易。
-
我不知道...这听起来很不合常规。通常,代码将存储在一个独立于它需要部署的位置的地方,并且您将有一个部署脚本将其放在 /var/www 中。我绝对是 Git 的常规用户,所以在这种情况下我无法为您提供太多帮助。
-
@Makoto 这正是我所拥有的。对不起,如果我不够清楚。我在我的 Web 服务器上运行了一个脚本,该脚本通过 POST 请求通过 git 服务器上的提交后挂钩调用。这个脚本然后执行一个 Bash 脚本,它计算出它需要做什么,然后从任何地方运行一个
git fetch。我只需要一种方法来整齐地首先对源代码进行版本控制。查看我的编辑。
标签: git version-control