我在某个地方读过*这样的设置会很好:
两个主要分支,每个服务器一个。
推送主人发送更改为live;
推送到dev / stage(或者你称之为的任何东西)会发送更改到staging;
工作流:
从dev创建分支;
在本地工作,直到您准备好进行测试;
合并回dev;
推送到Hub,它将更改发送到dev / staging服务器。
准备好上线之后:
从dev合并到master,
然后将master推送到Hub,Hub将这些更改发送到实时服务器。
两个主要分支,每个服务器一个。
所以我在“webroot / myliveapp /”上有一个分支“生产” 和“webroot / devapp /”
上的另一个分支“发展”存储库应该在哪里?
更新
我的意思是:
根据这个流程,我们将拥有:
Prime repo;
裸露的回购中心;
克隆;
开发和生产分支应该属于一个存储库,对吗?
如果这是正确的,那么我们应该发出FIRST git init命令吗? 在我们的Prime回购中?
所以我们会:
“webroot / myliveapp /” - 生产分支;
“webroot / devapp /” - 开发分支;
“webroot / .git” - Prime存储库;
这有意义吗?
或者Prime库是否应该与我们的生产分支机构位置相对应?
*注意:如果您需要有关我正在尝试实施的工作流程的上下文,请执行以下操作: http://joemaller.com/990/a-web-focused-git-workflow/
答案 0 :(得分:9)
感谢您对问题的更新,现在更加清晰。
我相信你遇到的问题是基于对Git工作流程的误解; Git不会将目录等同于分支,它会将视图系统等同于分支。这很强大 - 但很容易在脚下射击自己。让我解释一下。
Git本身更像是一个数据库支持的,差异化版本的历史跟踪文件系统。它在你的文件系统“之上”,而不是“它的一部分”。它不使用您的文件系统来表示分支,而是当您签出不同的分支时,文件系统中的所有文件将更改为该分支中的文件。您要求Git使您的文件系统代表该分支的替代现实。
如果您在分支机构master
上,并且已提交了文件root/foo.txt
,那么您需要查看分支机构experiment
,不 root/foo.txt
1}}已提交,当您查找时,您会发现该文件已消失。它是master
的一部分,而不是experiment
,因此它不存在于您的文件系统中。这就是为什么Git在你允许你切换分支之前真的很挑剔你当前的分支 - 如果你对Git不知道的文件系统进行了非分段更改,它会拒绝用不同的现实覆盖它们来消除它们。你必须先干预才能把事情做好。
因此,要回答问题,请不要为“myliveapp”和“devapp”创建子目录 - 创建不同的分支。只需在“webroot”下设置一个代码库。然后,劈开,比如说,“不稳定”的分支,像往常一样提交你的更改。然后,您可以通过切换到“devapp”分支将存储库中的所有文件切换到开发服务器文件的版本,并且您可以随时切换回“不稳定”。
如果要更新分支,例如在更新您的开发服务器时,您可以merge
“不稳定”进入“devapp”。这将使“devapp”的所有文件看起来像“不稳定”的文件,使其更新。
还有一点需要注意:主要回购,裸仓和克隆之间的差异几乎为零。软件几乎没有区别;相反,说“Linus'内核是规范的Linux内核”是一种人类惯例。有了这样的理解:
.git
目录,它是空的 - 这对于没有人需要改变文件的服务器来说很好。最后,.git
目录不包含你的repo文件,它包含git配置和数据库。它是数据库形式的整个存储库历史记录,用于使用特定版本的软件填充其余的存储库。这就是我发表评论的原因:你可以本地随时查看任何版本的存储库的任何版本,无需网络通信 - 因为它就在那里.git目录。唯一需要的网络通信是,当您希望使用push
或pull
将本地存储库同步到其他存储库时。