php – Git – 每个开发人员的多台机器 – 跨机器提交但不提供给
我们正在从SVN过渡到git,并且有一些我无法理解的概念.
我们有如下设置: >直播服务器,“直播” 我已将我们的源代码转换为git仓库,并将其提交给“本地”.这一切都运行良好,当我克隆它时,它将主分支复制到我的本地环境,无论我在家还是在工作.拉动实时服务器也很有效,它将主分支更改拉到实时环境中.但我希望有以下可能性: >我希望能够在工作站上开发和提交而无需推送到主分支,但我希望这些更改也能反映在我的家用机器上.换句话说,我希望能够在家中进行部分更新或功能,提交并继续处理它,而不会被任何类型的实时分支.这是用分支完成的吗?我承诺然后推送到特定分支?请注意,使用家用计算机跟踪工作站git存储库是不可能的,因为工作站并不总是打开(任何在Mac上运行java应用程序的人都知道它最多只能保持几个小时) 编辑: 关于这一切是如何工作的我的假设的实际例子:假设我们的项目是“项目”,我们有开发人员“dev1”,“dev2”和“dev3”,每个都有2台机器.该团队有3个任务:“bug”,“feature”和“collaboration”. Bug被分配给dev1,功能被分配给dev2,协作是三个需要共同工作的功能($REMOTE是我们本地开发服务器上主要仓库的url,即user @ local:repo.git): ========= I.在当地工作 由于dev1被指定为“bug”,他将负责处理.他做了以下事情: $git branch bug $git checkout bug // switches to bug branch ( // edit some files) $git commit -a -m 'I fixed the bug!' $git push $REMOTE bug 这个开发人员现在如何将他的修复程序合并到主仓库中,一旦完成合并,他如何在所有机器上删除bug分支?我希望bug分支在人们进行更新或获取时会消失,或者如果他们检查出来或者你检索它的话. ======== II在本地工作,然后继续在另一个位置上的同一分支 “feature”已分配给“dev2”,他这样做: $git branch feature $git checkout feature // switches to feature branch ( // edit/add some files etc. ) $git commit -a -m 'I made some updates,will continue at home' $git push $REMOTE feature // at home,the developer does the following,right? $git clone $REMOTE -b feature /some_new_folder // if he didn't clone the whole repo previously or cd previously_cloned_repo_master_or_whatever $git fetch $git checkout $REMOTE feature ( // right? ) ( // edit some files then ... ) $git commit -a m 'I finished!' $git push // Same as above,what next? How to merge it into all other branches and safely delete the branch afterwards. What happens when someone is in a branch that has been deleted,and makes a pull? ======== III许多人在一个分支上,与主分支分开 “协作”是一项共同努力,将由来自所有6个地点的所有三个开发人员共同努力.它由dev3创建. $git branch collaboration $git checkout collaboration // switches to needed branch ( // add something,so we have something to commit) $git commit -a -m 'Initialized new branch' $git push $REMOTE collaboration ( // The other two devs can then simply call .. ) $git fetch $git checkout $REMOTE collaboration ( // And they're ready to go,right? ) ( // Each dev then makes his own edits on some areas,commits,and pushes. All pushes change the content of the branch,so that if dev2 pushed and dev1 makes $git pull in the root of the project while on this branch,dev1 will get his changes,right? ) ======== 此外,是否可以将分支限制为特定的分支创建者?例如,我想看看dev1在删除它之前对“bug”做了什么,但是如果我想对它进行一些自己的更改,我不应该被允许这样做,我应该这样做对该给定分支发出拉取请求,dev1应该必须手动接受我的更改 – 我不应该强迫他这么做. 解决方法
TL; DR
使用git flow. 它会删除问题并自动完成您要问的一些事情.当您熟悉git flow和分支等时,您可以轻松选择以不同方式执行操作 – 或手动操作. 更改也会反映在我的家用机器上 在你的imac推/拉到非主控和你的家用机器上从非主控推/拉. 其中“not-master”是您目前正在处理的任何分支. 每个开发分支 由您决定,您的工作流程需要帮助不妨碍开发.例如.如果两个开发人员在同一个任务上合作会怎样 – 你想强迫他们在不同的分支机构工作吗?功能分支可能更有意义,但是拥有用户分支没有任何问题. 独立的生产部门 但是你这样做 – 你的实时应用程序应该来自一个已知的稳定标签/分支,通常不会直接推送给主人,因为破坏事物是开发的一部分,但破坏你的实时应用程序将从中获取的代码是绝对的我想避免.您应该能够毫无疑问地随时启动您的实时安装,您可能会使用损坏的代码.如果您使用的是Continuous Integration server,那么如果所有测试都通过,您可以轻松地从开发分支自动合并到主控,甚至可以自动部署. 分支完成后 所有的工作流程疑问都是一回事.完成分支后,将其合并到主分支. 即 $git branch working-on-this master $git add ... $git commit ... $# rinse and repeat $git push --set-upstream $REMOTE working-on-this 到时候了: $git checkout master $git pull $git merge working-on-this $git push $git branch -d working-on-this $git push $REMOTE :working-on-this 您没有明确删除其他计算机上的所有分支;但是任何人都可以在任何时候运行: $git branch --merged master 如果分支完成,将如下所示: $git branch --merged master master working-on-this $git branch -d working-on-this 这表明可以安全地删除这项工作.在任何情况下 – 如果您尝试删除在执行命令时未与您所在分支合并的分支,git branch -d会触发警告并中止. 如果您发现有多个远程分支被认为已经完成 – 您可以使用一个命令清理它们: $git remote prune -n origin -n标志表示它只报告它要删除的分支 – 删除该标志以实际删除过时的远程分支 如果你有几个开发人员在同一个分支上工作(协作),那么沟通是关键,不要依赖于工作流程,在让你的团队中的一个团队在一个(据称)完成的分支中工作之前,主动讨论删除事情. 限制分支提交权限 是的,你可以这样做 – 但你真的想要吗?你最好使用通信和约定. 一些建议: >任何人都可以创建一个远程分支 任何人都可以在任何时候做上述任何事情,但假设你相信你的团队整体,没有理由限制开发人员阻止他们这样做 – 他们可能有时需要打破排名和规则防止这种情况,而公约则不然. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |