git的使用

来源:互联网 发布:windows iso下载地址 编辑:程序博客网 时间:2024/05/16 04:02

创建仓库

注册github账户,登录后,点击”start a project”
这里写图片描述

在新页面中,输入项目的名称,勾选’readme.md’,点
击’create repository
这里写图片描述

添加成功后,转到文件列表页面,点击’create new file’创建新文件
这里写图片描述

填写文件名称为’.gitignore’,代码如下,表示项目中的pyc文件不需要被管理,因为这些文件代码是根据py生成的
详细的ignore文件可以参考官方Python.gitignore文件

*.pyc

点击’preview’查看预览,点击’create new file’完成创建

这里写图片描述

创建完成后,文件列表如下
这里写图片描述

添加ssh账户

如果某台机器需要与github上的仓库交互,那么就要把这台机器的ssh公钥添加到这个github账户上
点击账户头像后的下拉三角,选择’settings’

这里写图片描述

点击’SSH and GPG keys’,添加ssh公钥

这里写图片描述

在ubuntu的命令行中,修改某台机器的git配置
这里写图片描述
修改为注册github时的邮箱,填写用户名,要求组员的用户名不能重复
这里写图片描述

生成git密钥
公钥为id_rsa.pub
私钥为id_rsa

ssh-keygen -t rsa -C "邮箱地址"

这里写图片描述

查看公钥内容,复制此内容

cat id_rsa.pub

这里写图片描述

回到浏览器中,填写标题,粘贴公钥

这里写图片描述

公钥添加成功后,如下图

这里写图片描述

克隆项目

在浏览器中点击进入github首页,再进入项目仓库的页面
这里写图片描述

复制git地址

这里写图片描述

在命令行中复制仓库中的内容

git clone git地址

这里写图片描述

创建项目分支

每个员工开发期的代码互不干扰,并行开发,则每人使用一条分支
项目开发中公用分支包括master、dev
1.分支master用于发布,默认分支,当需要发布时将dev分支合并
2.分支dev开发阶段性的代码合并,每个阶段的工作完成后需要进行一次,控制项目的进度
3.成员分支用于每个项目成员的代码开发,实现不交叉
创建分支

git branch 分支名称例:git branch dev

切换分支

git checkout 分支名称例:git checkout dev

将本地分支跟踪服务器分支

git branch --set-upstream-to=origin/分支名称 分支名称例:git branch --set-upstream-to=origin/dev dev

创建并切换分支

git checkout -b 分支名称例:git checkout -b itcast

查看所有分支,当前分支前标记为星*

git branch

这里写图片描述

删除分支

git branch -d 分支名称没有例子,没错,就是没有例子,如果你删除了,我也找不回来哟

搭建项目框架

当前项目分支一共有3个,分别为master、dev、itcast,当前在itcast分支上工作
在克隆的目录下创建项目,使用django框架

这里写图片描述

将文件代码添加到暂存区

git add dailyfresh/

将暂存区提交到仓储区

git commit -m '搭建框架'

以上两步运行效果如下图

这里写图片描述

上传分支

当从远程仓库克隆时,实际上Git自动把本地的master分支和远程的master分支对应起来
远程仓库的默认名称是origin
推送前github上文件列表如下图

这里写图片描述

推送前github上分支列表如下图
这里写图片描述

推送分支,就是把该分支上的所有本地提交推送到远程库,推送时要指定本地分支,这样,Git就会把该分支推送到远程库对应的远程分支上

git push origin 分支名称例:git push origin dev

执行命令后提示如下
这里写图片描述

因为dev分支中没有文件操作,所以文件列表不变,但是分支列表增加了一项
点击垃圾桶可以删除指定分支,但是不要删
这里写图片描述

当前文件在itcast分支上,所以推送itcast分支

git push origin itcast

执行命令后提示如下

这里写图片描述

推送后github上文件列表如下图,注意在红线1处选择itcast分支
这里写图片描述

推送后github上分支列表如下图,在上图中点击红线2处
这里写图片描述

将itcast分支合并到dev分支

git checkout devgit merge itcast

这里写图片描述

推送dev分支

git push origin dev

将dev分支合并到master分支

git checkout mastergit merge dev

这里写图片描述

推送master分支

git push origin master

推送命令执行后如下图
这里写图片描述

在浏览器查看master分支的文件列表如下

这里写图片描述

开发

项目经理创建完成仓库后,接下来项目组成员就要进行开发工作了
以下操作由每个组员独自完成

添加ssh账户

这一步是组员在ubuntu中生成ssh密钥,然后交给项目经理添加到github中
在ubuntu的命令行中,修改某台机器的git配置
这里写图片描述

修改为注册github时的邮箱,填写用户名,要求组员的用户名不能重复
这里写图片描述

生成git密钥
公钥为id_rsa.pub
私钥为id_rsa

ssh-keygen -t rsa -C "邮箱地址"

这里写图片描述

查看公钥内容,复制此内容

cat id_rsa.pub

这里写图片描述

将复制的公钥发给项目经理,等项目经理在github上添加后,会将项目地址下发,然后就可以参与到项目开发中进行后续操作

本地克隆

根据项目经理提供的地址,如“git@github.com:bossliu2016/django1.git”,从github上将项目克隆到本地,默认对应的是master分支

git clone 项目地址例:git clone git@github.com:bossliu2016/django1.git

克隆后如下图
这里写图片描述

在克隆出来的目录下,隐藏目录.git存储了服务器、分支、文件变更等信息

同步分支

以自己的姓名创建分支,如果此分支已经存在可以添加数字后缀,具体要与项目经理商量

git checkout -b zhujiao

将本地分支推送到服务器

git push origin zhujiao

将本地分支跟踪服务器分支

git branch --set-upstream-to=origin/分支名称 分支名称例:git branch --set-upstream-to=origin/zhujiao zhujiao

将github上的dev分支同步到本地,因为开发过程中,所有组员都向这个分支上提交阶段性代码,并从这个分支获取最新代码

git checkout -b dev origin/dev

效果如下图

这里写图片描述

开发管理

上面的操作,只有我们在加入项目的第一天需要进行,只操作一次就够了
接下来的操作,是我们每天开发中都要进行的操作,这是必须做到熟练操作的命令
当前用户以zhujiao分支进行开发

git checkout zhujiao

本地仓库分为三部分:工作区,暂存区,仓库区,其中暂存区、仓库区是版本库部分
使用IDE如sublime、pycharm等打开项目目录

工作区与暂存区

对于添加、修改、删除文件的操作,都发生在工作区中
暂存区指将工作区中的操作完成小阶段的存储,是版本库的一部分
工作区与暂存区交互的方式及命令如下
这里写图片描述

添加

按照工作分配,需要创建df_user模块,此时文件位于工作区

python manage.py startapp df_user

在ide中编辑df_user/models.py文件,创建模型类UserInfo

class UserInfo(models.Model):    uname = models.CharField(max_length=20)    upwd = models.CharField(max_length=40)    def __str__(self):        return "%d" % self.pk

将目录df_user及所有子目录和文件添加到暂存区

git add 文件1 文件2 ...git add 目录例:git add df_user/

撤销

使用暂时区的内容恢复工作区的内容,放弃工作区的更改
在ide中编辑df_user/models.py文件,删除掉str方法

class UserInfo(models.Model):    uname = models.CharField(max_length=20)    upwd = models.CharField(max_length=40)

此时无str方法的类在工作区,暂存区中的类是有str方法的,如果想回到暂存区的状态,则

git checkout -- 文件名例:git checkout -- df_user/models.py

在ide中查看df_user/models.py文件,发现str方法又回来了

暂存区与仓库区

仓库区表示个人开发的一个小阶段的完成,仓库区中记录的各版本是可以查看并回退的,但是在暂存区的版本一旦提交就再也没有了
暂存区与仓库区交互的方式及命令如下

这里写图片描述

查看暂存区未提交的记录

git status

这里写图片描述

将暂存区的记录提交到仓库区

git commit -m '本次提交的说明信息'例:git commit -m '创建df_user模块'

这里写图片描述

历史

查看仓库区的历史操作

git reflog

这里写图片描述

历史版本的名称:在Git中,用HEAD表示当前版本,也就是最新的提交00c6c39,上一个版本就是HEAD^,再上一个版本就是HEAD^^,当然往上100个版本写100个^肯定就麻烦了,提供了一种简写方式为HEAD~100

对比

在ide中编辑df_user/models.py文件,删除str方法

from django.db import modelsclass UserInfo(models.Model):    uname = models.CharField(max_length=20)    upwd = models.CharField(max_length=40)

对比工作区和仓库区中某版本某文件的不同

git diff HEAD -- 文件名例:git diff HEAD -- df_user/models.py

这里写图片描述

将上面的代码添加提交

git add df_user/models.pygit commit -m '删除模型类的str方法'

在ide中编辑df_user/models.py文件,修改str方法

from django.db import modelsclass UserInfo(models.Model):    uname = models.CharField(max_length=20)    upwd = models.CharField(max_length=40)    def __str__(self):        return "%s" % self.uname

将上面的代码添加提交

git add df_user/models.pygit commit -m '修改模型类的str方法为name属性'

对比工作区和仓库区中某版本某文件的不同

git diff HEAD HEAD^^  -- df_user/models.py

这里写图片描述

回退

回退历史版本到暂存区
将df_user/models.py文件的更改完成添加、提交

git add df_user/models.pygit commit -m '修改模型类'

查看当前的暂存区状态

git status

这里写图片描述

现在,没有str方法的是当前版本为HEAD,有str方法的版本为HEAD^,将有str方法的代码恢复到暂存区

git reset HEAD^或版本号例:git reset HEAD^

这里写图片描述

再次查看当前的暂存区状态

git status

这里写图片描述

可以再将暂存区的内容恢复到工作区

git checkout -- df_user/models.py

在ide中查看df_user/models.py文件,发现有str方法

删除

在ide中将文件删除
从工作区到暂存区提交

git rm 文件名

从暂存区到仓库区提交

git commit -m '说明信息'

示例如下
在模块df_user下添加文件a.py,编写代码如下

if __name__=='__main__':        print 'test a'

将df_user/a.py的变更添加到暂存区,再提交到仓库区

git add df_user/a.pygit commit -m '创建文件a'

在ide中将df_user/a.py文件删除,然后在暂存区删除

git rm df_user/a.py

这里写图片描述

提交暂存区的记录到仓库区

git commit -m '删除文件a'

这里写图片描述

提示:删除的文件一样可以恢复,只需要先从仓库区到暂存区,再从暂存区到工作区

本地与服务器

本地与服务器交互的方式及命令如下
这里写图片描述

推送指将特定分支在本地仓库区的记录发送到服务器上
获取指将服务器特定分支向本地工作区同步

获取

建议:在每天开始编写代码前,先与服务器同步一次;或者在公用分支如dev上开发时,建议先同步后开发
什么时候会用到dev分支呢?答:合并阶段代码到dev分支,编辑公用文件如dailyfresh/urls.py
1.切换到dev分支

git checkout dev

2.获取代码,如果dev分支上有更新的记录则会同步到本地

git pull

3.切换回自己的分支继续开发

git checkout zhujiao

推送

建议:在每天下班前将当天开发推送到服务器,这样可以在服务器中存储一个备份,即使本机出问题,在服务器上还能存在代码备份
注意:只会将仓库区的记录提交到服务器的对应分支下
推送前要将此分支跟踪服务器上的同名分支,推荐在创建分支时就完成跟踪
如果要推送自己分支以外的分支,需要先获取,再解决冲突,然后再推送

git push origin zhujiao

合并分支

一个功能模块开发完了,合并到dev分支
1.切换到dev分支

git checkout dev

2.获取代码,如果dev分支上有更新的记录则会同步到本地

git pull

3.合并

git merge zhujiao

4.添加、提交并推送

git push origin dev

5.切换回工作分支

git checkout zhujiao

6.在最新代码上继续开发,所以将dev分支合并到zhujiao分支

git merge dev

解决冲突

建议:在更改公用文件如dailyfresh/urls.py时需要操作dev分支,因为大家都可以操作dev分支,所以在合并时可能出现冲突
冲突的示例如下,修改dailyfresh/urls.py文件

项目经理的操作

1.项目经理负责前台的开发,需要修改dailyfresh/urls.py文件

git checkout dev

2.在dailyfresh/urls.py文件中添加一条url

from django.conf.urls import include, urlfrom django.contrib import adminurlpatterns = [    url(r'^admin/', include(admin.site.urls)),    url(r'^',include('df_goods.urls')),]

3.添加并提交

git add dailyfresh/urls.pygit commit -m '配置前台url'

4.同步到服务器

git push origin dev

员工助教的操作

1.员工助教负责用户模块的开发,需要修改dailyfresh/urls.py文件

git checkout dev

2.在dailyfresh/urls.py文件中添加一条url

from django.conf.urls import include, urlfrom django.contrib import adminurlpatterns = [    url(r'^admin/', include(admin.site.urls)),    url(r'^user/',include('df_user.urls')),]

3.添加并提交

git add dailyfresh/urls.pygit commit -m '配置用户模块url'

4.向服务器推送

git push origin dev

5.推送时发现出错误了,错误信息如下图

这里写图片描述

根据提示,需要先获取服务器的变更

git pull

发现有冲突,而且自动合并冲突失败,需要手动合并冲突,指向dailyfresh/urls.py文件
这里写图片描述
当前dailyfresh/urls.py文件内容如下

from django.conf.urls import include, urlfrom django.contrib import adminurlpatterns = [    url(r'^admin/', include(admin.site.urls)),<<<<<<< HEAD    url(r'^user/',include('df_user.urls')),=======        url(r'^',include('df_goods.urls')),>>>>>>> ae79e1fd93d0d9e7f8ca36481c611a2b4a38a9db]

其中,<<<<<<< HEAD表示当前版本的内容,=======后面,表示>>>>>>> ae79e1fd93d0d9e7f8ca36481c611a2b4a38a9db版本的内容,发现两句代码并不冲突,都需要保留,如果不能确定是否保留,可以与编写该语句的人员沟通,当前代码更改后如下

from django.conf.urls import include, urlfrom django.contrib import adminurlpatterns = [    url(r'^admin/', include(admin.site.urls)),    url(r'^user/',include('df_user.urls')),    url(r'^',include('df_goods.urls')),]

6.冲突解决完成,再次添加、提交、推送

git add dailyfresh/urls.pygit commit -m '配置用户模块url-解决冲突后'git push origin dev

Debug分支

在项目的正常开发过程中,之前发布过的版本可能很会出bug,这时就需要停下来现在的开发任务,先去修改bug,完成后再回来继续开发任务
git中stash提供了保存现场的功能,可以把当前工作区、暂存区中的内容不需要提交而保存下来,转而去做bug修复,完成后再恢复现场,继续开发工作
示例如下:停止当前工作,修复master分支下的一个bug,为修改dailyfresh/settings.py文件
语言和时区的原内容为

LANGUAGE_CODE = 'en-us'TIME_ZONE = 'UTC'

将语言和时区改为

LANGUAGE_CODE = 'zh-Hans'TIME_ZONE = 'Shanghai/Asia'

1.查看当前状态

git status

这里写图片描述

2.保存现场

git stash

这里写图片描述

再查看当前状态,发现是干净的

git status

这里写图片描述

3.切换到master分支

git checkout master

4.新建临时分支用于修复bug,用完后会删除此分支

git checkout -b bug001

5.按照上面的设计,修改dailyfresh/settings.py文件的语言和时区如下

LANGUAGE_CODE = 'zh-Hans'TIME_ZONE = 'Shanghai/Asia'

添加:将工作区中的更改添加到暂存区
注意:当前目录为manage.py文件所在目录

(py_django)python@ubuntu:~/Desktop/pytest/django1/dailyfresh$ git add dailyfresh/settings.py

提交:将暂存区的内容提交到仓库区

git commit -m '修复时区语言'

6.切换回master分支

git checkout master

7.将bug001分支合并到master分支
因为临时分支用完后会被删除,无法通过分支查询历史记录,所以使用临时分支时需要使用no-ff的方式,同时写上-m备注信息

git merge --no-ff -m "修复bug-语言时区" bug001

这里写图片描述

推送到服务器

git push

8.删除临时分支bug001

git branch -d bug001

这里写图片描述

9.切换回工作分支zhujiao

git checkout zhujiao

查看现场列表

git stash list

这里写图片描述

恢复现场

git stash pop

这里写图片描述

恢复现场后查看工作状态

git status

这里写图片描述

接下来可以在这个分支继续开发

发布

项目开发完一个版本后,需要进行项目的合并与发布
项目合并与发布,需要项目经理和组员一起来完成,每个人将开发的分支逐个合并到dev分支,如果有冲突则解决冲突,在dev上的代码经过测试没有问题后,则由经理合并到master分支,完成发布
实现发布主要遵守如下步骤:
每个人逐个合并分支到dev
经理合并dev到master并发布
每个人获取最新的dev分支、master分支

逐个合并

这一步是每个人将自己分支上开发的代码,合并到dev分支上,每个人逐个执行1-6步
前题:已经完成了自己分支代码的开发并完成添加、提交及推送
1.切换到dev分支

git checkout dev

2.获取最新记录代码

git pull

3.合并,将自己编写的代码加入进来,如果有冲突则与上一个组员商量解决冲突
如果没有冲突则可以跳过4、5步

git merge 分支例:git merge zhujiao

4.添加
注意:在项目的根级目录下,即README.md所在的目录下

git add ./

这里写图片描述

5.提交

git commit -m 'zhujiao发布v1.0'

6.推送

git push origin dev

经理合并

所有成员都完成合并后,接下来是项目经理要执行的操作
1.切换到dev分支

git checkout dev

2.获取最新

git pull

3.切换到master分支

git checkout master

4.合并dev分支到master分支
如果有冲突,则找相应的组同解决冲突
如果没有冲突则可以跳过5、6步

git merge dev

5.添加
注意:在项目的根级目录下,即README.md所在的目录下

git add ./

6.提交

git commit -m '发布v1.0'

7.打标签
标签就是为了给一堆数字的版本号,起一个容易记住的名字,一般用于master分支

git tag v1.0

8.推送

git push

逐个获取

现在最新的代码已经有了,接下来在这个版本代码基础上继续开发,每个人都要获取最新的代码
1.切换到master分支

git checkout master

2.获取

git pull

3.切换到dev分支

git checkout dev

4.将master分支合并到dev分支

git merge master

5.切换到自己工作的分支如zhujiao分支

git checkout zhujiao

6.将dev分支合并到工作分支如zhujiao分支

git merge dev

总结

git命令

git clone git地址
git add 文件或目录
git rm 文件或目录
git checkout – 文件
git commit -m ‘备注说明’
git reset HEAD或版本号
git reflog
git log
git status
git branch 分支名称
git branch –set-upstream-to=origin/分支名称 分支名称
git checkout 分支名称
git checkout -b 分支名称 origin/分支名称
git diff 版本1 版本2
git merge 分支名称
git pull
git push origin 分支名称
git tag 标签名称
git stash