Git是目前世界上最早进的分布式版本控制系统python
git的两大特色:git
sudo apt-get install git
安装成功后,运行以下命令github
git
在ubuntu的命令行中,修改某台机器的git配置,在家目录下:数据库
修改成注册github时的邮箱,填写用户名,要求组员的用户名不能重复django
git config --global user.name "zb" git config --global user.email "1273844671@qq.com"
最后能够经过 git config -l 这个命令查看已配置的用户名和邮箱信息ubuntu
git config -l
在实际项目开发中,按照以下步骤使用git进行代码管理浏览器
注册github帐户,登陆后,点击"start a project"缓存
在新页面中,输入项目的名称django1,勾选'readme.md',点击'create repository'服务器
添加成功后,转到文件列表页面,点击'create new file'建立新文件框架
填写文件名称为'.gitignore',代码以下,表示项目中的pyc文件不须要被管理,由于这些文件代码是根据py生成的
详细的ignore文件能够参考官方Python.gitignore文件
*.pyc .idea/ migrations/
建立完成后,文件列表以下:
点击'SSH and GPG keys',添加ssh公钥
删除~/.ssh目录,这里存储了旧的密钥,没有就不用删除
rm -r .ssh
运行以下命令生成密钥,本人没写,为默认值
ssh-keygen -t rsa -C "Github帐号,能够是用户名,也能够是邮箱地址"
ssh-keygen -t rsa -C "1273844671@qq.com"
查看公钥内容,复制此内容
cat id_rsa.pub
回到浏览器中,填写标题,粘贴公钥,点击ADD SSH KEY
公钥添加成功后,以下图
在浏览器中点击进入github首页,再进入项目仓库的页面
复制git地址
在命令行中复制仓库中的内容
git clone git地址 ,选择的要是httts,会要填Github的用户名和密码,要是使用SSH则不会。
cd Desktop/ mkdir jiangshi/ cd jiangshi/ git clone https://github.com/zb14755456464/django1.git cd bj_ttsx13/
sign_and_send_pubkey: signing failed: agent refused operation
eval "$(ssh-agent -s)" ssh-add
每一个员工开发期的代码互不干扰,并行开发,则每人使用一条分支
项目开发中公用分支包括master、dev
建立分支,git branch 分支名称
git branch dev
切换分支,git checkout 分支名称
git checkout dev
将分支推送到服务器,git push origin 分支名称,选择的要是httts,会要填Github的用户名和密码,要是使用SSH则不会。
git push origin dev
将本地分支跟踪服务器分支 git branch --set-upstream-to=origin/分支名称 分支名称.
主要的做用是:能够知道本地的代码,比服务器的新,仍是服务器的比本地的新,以及新几个版本。通常是员工本身的代码和本地的dev和并,在哪本地的dev分支和服务器的dev跟踪。本身写代码的分支不用跟踪。
git branch --set-upstream-to=origin/dev dev
建立并切换分支 git checkout -b 分支名称
git checkout -b itcast
查看全部分支,当前分支前标记为星*
git branch
删除分支
git branch -d 分支名称
git branch -d dev
当前项目分支一共有3个,分别为master、dev、itcast,当前在itcast分支上工做
在克隆的目录下建立项目,使用django框架
经理能够把项目共用的部分添加进去,如setting中的配置文件要连接的数据库,静态文件和上传文件的配置,把csrf注销等
将文件代码添加到暂存区
git add ./
将暂存区提交到仓储区
git commit -m '搭建框架'
以上两步运行效果以下图
把经理的分支上传到服务器
git push origin itcast
这时候除了经理的分支,有项目框架的代码 ttsx 其他上网都没有,以下图所示
dev 分支没有项目框架的代码 ttsx
在这个阶段,经理要作的就是把itcast的分支合并到共用的dev分支,这样全部的分支就能够从dev分支上取代码.
先切换到dev分支
git checkout dev
将itcast分支的内容合并到当前的分支dev
git merge itcast
把dev分支的内容推送到服务器
git push origin dev
这时服务器的分支dev就有项目ttsx的代码了
员工-开发
项目经理建立完成仓库后,接下来项目组成员就要进行开发工做了
如下操做由每一个组员独自完成
修改成注册github时的邮箱,填写用户名,要求组员的用户名不能重复
删除~/.ssh目录,这里存储了旧的密钥
rm -r .ssh
运行以下命令生成密钥
ssh-keygen -t rsa -C "Github帐号,能够是用户名,也能够是邮箱地址"
查看公钥内容,复制此内容
cat id_rsa.pub
将复制的公钥发给项目经理,等项目经理在github上添加后,会将项目地址下发,而后就能够参与到项目开发中进行后续操做
在克隆出来的目录下,隐藏目录.git存储了服务器、分支、文件变动等信息
在这里我是另外的开了一个终端模拟员工
根据项目经理提供的地址,如“git@github.com:bossliu2016/django1.git”,从github上将项目克隆到本地,默认对应的是master分支内容
克隆下来git clone 项目地址
git clone git@github.com:bossliu2016/django1.git
克隆后以下图
之因此没有ttsx的项目那是由于本地的分支默认只有一个master分支,
git branch
将github上的dev分支同步到本地,由于开发过程当中,全部组员都向这个分支上提交阶段性代码,并从这个分支获取最新代码,
意思就是根据远程的dev分支建立本地的dev分支
git checkout -b dev origin/dev
员工建立一个本身的分支用于开发,这是在dev分支上建立的,他就拥有dev分支上的内容,而master分支上就没有ttsx的项目
git checkout -b zj
我是在经理(jiangshi)本身用的分支上itcast作的增长,在pycharm中写一些东西以下图,查看增长的信息以下:
git checkout itcast git branch git status
把工做区增长的内容提交到缓存区,完成一个小的单元测试能够git add ./ 一次,能够屡次执行 git add ./ 操做.
git add ./
把缓存区的内容提交到版本库中,这里要说明一下,不要频繁的提交,而是完成一个业务提交一次,这是由于不让版本库的日志过多,后期找的麻烦.
git commit -m '建立用户应用'
可使用git status 命令查看状态
首先在物理上把文件给删除了,而后执行git rm 删除文件的路径,主要是告诉版本库,最后执行 git commit -m '删除urls' 提交就好了.版本库就会保存这个操做
在pycahrm中删除urls以下图'
能够用git status 查看当前的状态
git status
版本库中不知道已经把它给删除了,从这个版本中删除
git rm ttsx/ttsx/urls.py git status
git commit -m '删除urls' git status
把删除的东西给恢复过来,只须要回到删除以前的版本就好了,经过 git reser HEAD 或版本号
历史版本的名称:在Git中,用HEAD表示当前版本,版本号为c27e22e,也就是最新的提交,上一个版本就是HEAD^,再上一个版本就是HEAD^^,固然往上100个版本写100个^确定就麻烦了,提供了一种简写方式为HEAD~100
查看仓库区的历史操做,
git log git reflog
git reset HEAD^
把仓库区的操做区的记录回到了暂存区的记录
git status
git checkout -- ttsx/ttsx/urls.py git status
对比工做区和仓库区中某版本某文件的不一样
git diff HEAD -- 文件名
拿当前的版本库和工做区中的urls进行对比,一致则什么都没有
git diff HEAD -- ttsx/ttsx/urls.py
在这里我删除urls的一条路径在对比
git diff HEAD -- ttsx/ttsx/urls.py
上面的红色表示当前的版本库独有这条路径,而当前的工做区没有这条路径。,白色的内容表示的是共有的
在urls中在增长一条信息以下,在进行比较,这是当前的版本库和工做区中的数据就各有各的不一样
git diff HEAD -- ttsx/ttsx/urls.py
git add ./ git commit -m '建立商品应用' #提交后在比较就一致了 git diff HEAD -- ttsx/ttsx/urls.py git reflog
git diff d822f0a ce0bfe3 -- ttsx/ttsx/urls.py
回到建立用户的版本
git reset ce0bfe3 git status git checkout -- ttsx/ttsx/urls.py git status
把代码提交到服务器,
git branch git push origin itcast
git branch git pull
一个员工正在开发,还没完成,出现了一个bug要解决,下面模拟在开发把一条url注释
工做区并非干净的,由于功能没作完也不能提交
git status
解决方法是:
保存现场
git stash git status
在master分支上出bug了,切换到master分支,注意不要直接在master 分支上作修改,要基于master分支新建一个分支如but001.
git checkout master git checkout -b but001
在 but001分支上修改了README,随便写了几句话,就当BUG解决了
git status
git add ./ git commit -m '修改说明的bug'
修改好bug后,切换到master分支上合并修改bug的分支
git checkout master
git pull
这个合并只在修改bug的时候用,由于git 合并的时候默认的是采用 fast forward分支,它自己的记录发生在记录在本身的生上,不会记录在合并后的分支上。
由于在开发过程当中,遇到的bug多,不会保留那么多的分支,会把bug后的分支删除,因此会采用 no fast forward合并.
git merge --no-ff -m '修改说明bug' but001
推送到服务器
git push origin master
删除临时分支bug001
git branch -d but001
.
切换回工做分支itcast
git checkout itcast
恢复现场,能够继续开发.
git stash pop
切换到 itcast分支
git checkout itcast
把上面模拟的一条url注释改过来
这是在另外一个终端上,另外一个员工zj,写的是商品模块,
git add ./ git commit -m '开发商品应用'
首先把jiangshi的代码合并到dev分支上
git status git branch git checkout dev #为了保持本地的代码和服务器上的一致 git pull git merge itcast
# 看本地有没有要提交的
git status
git push origin dev
把员工zj的代码合并到dev分支上
git branch git checkout dev # 它从服务器上获取代码,就会把员工jiangsji的代码user获取过来 git pull
合并本身的分支zj, 产生了冲突
git merge zj
上面产生的冲突的主要缘由是当前的版本包括user而合并来的分支版本不包括,合并来的分支版本包括goos而当前的版本不包括。
两个员工相互协商后的解决以下:
协商后员工zj能够提交修改后的代码
git add ./ git commit -m '解决url冲突'
把最新的代码提交
git push origin dev
合并完成后每一个人员工都获取最新的代码
jiangshi在dev分支上获取最新的代码
git checkout dev git pull
把最新的代码合并到本身的itcast分支
git checkout itcast git merge dev
jiangshi的最新代码既有本身的user也有zj的goods
员工zj也要获取最新的代码
git checkout dev git pull git checkout zj git merge dev
员工zj的最新代码既有本身的good也有jiangshi的users