2-3-git版本控制之github代码管理和合作开发

git版本控制之github代码管理

1,github一个代码托管的网站,最有名的就是github,这是全球最大的,中国用码云,
做代码托管,你放的代码所有人都能看到,但是你要别人不能看要交钱,github被微软收购了,
也可以自己创建一个代码托管的网站:gitlab,这是公司自己搭建的,命令都一样用,公司会给你一个账号
github就像是一个云,和git结合的很好,

2,现在你需要注册一个git账号,登陆之后如果你有项目都显示在左边,

3,一开始是不能提交代码的,你需要新建一个代码仓库,这个仓库名字最好和本地的项目名称一致,
创建的时候主要是仓库名称和描述,
步骤:
在本地的git上,
git remote add origin https://github.com/liqian08161992/luffy.git 这是给后面的地址起一个别名,叫做origin,以后就往这个地址推送代码了,
这就是建立了关联关系了,这个关联关系在.git文件夹下的config文件里面呢,
git push -u origin master,这是推送代码到线上

4,但是我们开发都在dev分支,所以也要把dev分支推送到dev,
切换到dev分支,
执行代码:git push origin dev

5,有了代码托管之后,你在公司开发的代码,不用拿电脑,回到家就可以写代码了,怎么办?
现在到了家之后,首先第一步需要把代码下载下来,怎么下载?
新建一个文件夹,然后在文件夹内部,右键打开git bash here
执行命令:git clone https://github.com/liqian08161992/luffy.git
然后把代码克隆下来,这是默认只复制master分支,没有dev分支,
在本地再新建一个dev分支,git branch dev,
切换到dev分支,
执行命令:git pull origin dev,这就是把dev代码拉下来了,

6,在家里开始写代码,开发一个功能,比如会员功能,
然后git add .
git commit -m '会员功能开发了三分之一',这是提交了本地,
git push origin dev,这是把代码推送到了服务器,这一步一定要有,

7,第二天到公司之后,打开目录,然后拉下来代码
执行命令:git pull origin dev然后代码就拉下来了,
然后修改了之后,再次提交,并且push到github
现在就多了push和pull,这是推送到远程仓库了,

#################################################################

git忘记提交代码引发的问题:

1,在公司开发的代码,比如开发了一个1.py,还有add,commit,但是没有push,
2,到了家里之后,pull的时候就没有代码拉下来的,
怎么办?
你可以接着开发,写第二个文件,2.py,然后add,commit,push,
3,第二天到了公司,公司有一个1.py,现在怎么做???
现在要先把代码拉下来,可能会冲突,也可能会合并,
然后继续开发,3.py,然后add,commit,push,

4,这个时候到了家里,
执行命令:git fetch origin dev,这个也是拉代码,但是没有1.py,3.py,因为这个时候还没有到本地,是从远程到了本地的工作区,
执行命令:git merge origin/dev,现在要从工作区拿回来,origin/dev这是固定搭配,

总结:
git remote add origin github地址
git clone github地址
git push origin dev
-------这一句相当于两句
-------git fetch origin dev
-------git merge origin/dev,这种会出现分叉,你可以把这一句命令改成git rebase origin/dev就不会分叉了,
git push origin master
-------这一句相当于两句
-------git fetch origin master
-------git merge origin/master

5,从git GUI页面可以查看所有的提交记录,这是一个树形的,
如果你忘记提交,可能会有分叉,

面试题,git rebase的作用?
在家忘记提交,在公司,你如果使用 git push origin dev
或者git fetch origin dev和git merge origin/dev,会产生分叉的记录,
为了保持提交记录的整洁,你可以把这一句命令改成ggit fetch origin dev和git rebase origin/dev就不会分叉了
这是干净的记录,

"""

git多人协同开发

多人协同开发:
1,首先是允许他人操作程序,

方式一:合作者模式
在github上,你可以克隆公开的所有的代码,但是你是不能提交的,如果你想要提交,就要在github里面,
进入项目,在项目下有一个settings里面,有一个Collaborators,合作者,然后添加github账号,
然后对方会有收到一个邮件,然后点击就进入了,这是邮箱确认,然后拉下来代码,就可以进行提交代码,协同开发了,

方式二,创建组织模式
在github上面有一个加号,点击new organizations,这就是创建一个组,然后这个组,可以开发很多的项目,
填写组织名称,邮箱,免费,邀请组员加入组织,
然后组织里面有设置,有权限的设置,默认是读read,可以写write,

这就是进入公司之后,需要老板把你拉进来,然后协同开发,
问题:需要几个分支?
不同的人开发不同的功能,比如打车,配送,然后两个人开发,
假设A提交到了代码dev分支,然后B回去拉代码下来,会启动不起来,因为别人的代码没有开发完,你拉下来你跑不起来的,

所以如果有两个人开发,就需要四个分支了,master分支,dev分支,然后两个人各一个分支,
然后两个人从dev拉下来代码到各自的分支,然后把各自的代码开发完了,
两个人先合并,或者两个人都合并到dev,所以各自有各自的分支,

到了公司拉下来dev分支代码之后,创建自己的分支,你就管你自己的分支就可以了,
代码提交到自己的分支,这个时候github上面就有各自的分支了,

场景:各自提交到各自的分支
1,touch 打车.py
2,git add .
3,git commit -m '打车开发一半'
4,git push origin liqian ##这一步推送之后,github就有自己的分支了,
也可以没有个人分支,就在自己的本地保存,但是有了个人的分支,每天提交,组长就会检查他的代码进度了,

场景:两个人都开发完了,合并到dev,
1,A现在切换到dev分支,
git checkout dev
git merge A 这是把我的分支合并到dev分支,
git push origin dev,这是推送到远程,
2,B现在切换到dev分支,
git checkout dev
git merge B 这是把B分支合并到dev分支,
git push origin dev,这是推送到远程,这个时候会报错的,
因为现在的dev 分支已经有比你现在的dev分支更加新的代码了,提示想要把代码拉下来,
error :git pull before pushing again,
所以一旦你看到了这个错误,你就要意识到,你需要先拉下来,然后才可以push,
git pull origin dev,
这个时候可能会有冲突的,可能会产生很多的冲突,只要相同地方的代码就会有冲突,
如果产生了1000个冲突,怎么办?这个地方就是合并冲突,就只能一个一个解决了,这个时候只需要合并,没有冲突
然后你拉下来之后就可以push代码了,
git push origin dev,
协同开发就会出现这样的问题!

问题:这个流程有问题,因为每一个人都想要第一个提交,因为第一个提交没有冲突,
但是如果很多呢,一般来讲公司会做出规定,因为会给你规定你就修改这几个文件,这样冲突会比较少,
但是再怎么规定,也是会产生冲突的,怎么办?
如果产生了冲突,会导致公司内部不和谐,所以公司在合并的时候,
1,所有的人都要在,
2,合并间隔的时间不能太长,如果两周合并一次,冲突就很多,三两天合并一次还可以,冲突少,解决方便,
其实这个时间没有什么硬性规定,一般是一两天,一个小功能开发完了,没有什么bug了,就可以合并了,
如果一个人的代码有bug,不能合并,就其他人先合并,

这就是两个非常重要的规则,

如果一个新人写的代码,你的老板就会先看一遍,你今天提交了代码,然后第二天发现代码不见了,你就要心慌了,
因为你的代码太烂了,被老板删了,或者重写了,很多人都有过这个经历,这就是老板review代码,
这是组长要做的,或者带新人的老人来做,老板一般没有时间做,

面试题:怎么review?
可以创建一个review的分支,然后把新人的代码不要提交到dev,先提交到review分支,然后都过一遍,
很多时候不报错,但是也会有问题,就要人工审核,

"""

##################################################

其他:
1,不用反复输入用户名和密码:

第一种方式:https的方式:通过地址里面添加用户名和密码来解决这个问题:
git remote add origin https://用户名:密码@github.com/liqian08161992/luffy.git
但是这种不太好,这种把用户名和密码暴露了,

第二种方式:使用ssh的方式,
使用git,进入项目根目录,然后输入:ssh-keygen.exe
一直回车,就会保存了,地址: (/c/Users/thinkpad/.ssh/id_rsa):
进入这个目录,/c/Users/thinkpad/.ssh
你会看到两个文件,id_rsa id_rsa.pub ,一个私钥,一个公钥,
然后你复制公钥,放到上面,你就可以不用加用户名密码了,

2,如果你不需要git管理项目中的一些文件了,怎么办?
你在项目根据目录下面,新建一个文件,vim .gitignore,这个文件需要push上去,
打开这个文件,然后加入
*.sql
*.pyc (这是py文件的编译文件,)
然后保存退出,你以后修改了这种文件,git status的时候就不会检测到这个文件了,git不管了,

3,django在github上面有不同的版本,
我们怎么创建版本?
在本地执行命令,git tag -a v1.0 -m "初次创建第一个模板"
在执行命令,git push origin --tags,这样你在github上面就有一个版本了,

"""

git工作流程

项目经理:

项目之初,项目经理搭建项目的框架,
建完框架之后,项目经理把项目框架代码放到服务器,

普通员工:

在自己的电脑上生成ssh公钥,然后把公钥交给项目经理,然后项目经理给你添加到服务器上,
项目经理给你每一个组员一个克隆地址,然后你把代码克隆到本地,
你可以在本地创建一个分支,然后每天在这个分支开发,
每一个员工把自己的完成的代码,发布到远程的dev分支上,
一般项目中都会有两个分支,一个master分支,一个dev分支,
master分支保存要发布的代码,
dev分支保存开发过程中的代码,所有的组员开发完自己的代码都要发到这个dev上
你不能每次开发一点都发布到dev上去,因为别人要下载这个项目,如果你没开发完,你就发上去了,别人下载了,可能会跑不起来的,
项目经理给你任务,预计几天完成,到时间了, 会问你有没有完,完了就可以推代码了,

posted @ 2020-06-01 11:18  技术改变命运Andy  阅读(186)  评论(0编辑  收藏  举报