加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – Git – 每个开发人员的多台机器 – 跨机器提交但不提供给

发布时间:2020-12-13 17:18:23 所属栏目:PHP教程 来源:网络整理
导读:我们正在从SVN过渡到git,并且有一些我无法理解的概念. 我们有如下设置: 直播服务器,“直播” 内部开发服务器,“本地”(git服务器,svn守护进程,所有repos都驻留在这个) 工作站(iMacs) 家用电脑(主要是linux电脑) 我已将我们的源代码转换为git仓库,并将其提交
我们正在从SVN过渡到git,并且有一些我无法理解的概念.

我们有如下设置:

>直播服务器,“直播”
>内部开发服务器,“本地”(git服务器,svn守护进程,所有repos都驻留在这个)
>工作站(iMacs)
>家用电脑(主要是linux电脑)

我已将我们的源代码转换为git仓库,并将其提交给“本地”.这一切都运行良好,当我克隆它时,它将主分支复制到我的本地环境,无论我在家还是在工作.拉动实时服务器也很有效,它将主分支更改拉到实时环境中.但我希望有以下可能性:

>我希望能够在工作站上开发和提交而无需推送到主分支,但我希望这些更改也能反映在我的家用机器上.换句话说,我希望能够在家中进行部分更新或功能,提交并继续处理它,而不会被任何类型的实时分支.这是用分支完成的吗?我承诺然后推送到特定分支?请注意,使用家用计算机跟踪工作站git存储库是不可能的,因为工作站并不总是打开(任何在Mac上运行java应用程序的人都知道它最多只能保持几个小时)
>我希望每个开发人员能够在他自己的应用程序部分工作,而我们彼此不依赖.是建议使用per-dev-branches进行此操作,还是应该为每个功能分支进行此操作?
>当某个功能的工作完成后,建议将分支合并到主仓库中,然后将主仓库更新拉入实时环境,还是应该为这些目的设置单独的“生产”分支?如何通过git进行实时部署?由于我们的发布频率约为每天10次修订(极快的开发周期),SVN到目前为止工作得非常好,因为我们的实时站点只是对存储库的检查,每当更新准备就绪时,我们只需调用svn update on实时服务器上的那些文件.有关git的任何最佳实践吗?

编辑:

关于这一切是如何工作的我的假设的实际例子:假设我们的项目是“项目”,我们有开发人员“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标志表示它只报告它要删除的分支 – 删除该标志以实际删除过时的远程分支

如果你有几个开发人员在同一个分支上工作(协作),那么沟通是关键,不要依赖于工作流程,在让你的团队中的一个团队在一个(据称)完成的分支中工作之前,主动讨论删除事情.

限制分支提交权限

是的,你可以这样做 – 但你真的想要吗?你最好使用通信和约定.

一些建议:

>任何人都可以创建一个远程分支
>没有人提交/合并到主人(只有领导开发者那样做)
> nobody删除远程分支(只有领导开发者才能这样做)
>没人修剪远程服务器(只有领导开发者那样做)

任何人都可以在任何时候做上述任何事情,但假设你相信你的团队整体,没有理由限制开发人员阻止他们这样做 – 他们可能有时需要打破排名和规则防止这种情况,而公约则不然.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读