#1 git教程
# 注册git服务器用户,权限-- 注意这个和客户端用户不是一样 # 客户端(linux)提交代码到本地仓库(简单版,了解原理) a.安装git sudo apt-get install git b.将客户端的公钥给git服务器 -1 生成公钥 ssh-keygen -t rsa -C "youremail@example.com" cat ~/.ssh/id_rsa.pub -2 git服务器添加客户端公钥 - 管理---》编辑设置---》身份验证---》ssh公钥---》SSH Key Actions---》上传公钥 -3 测试客户端是否可以免密码登录git服务器 ssh -T git@pha.ectrend.com/source/mobile-ecmagnet.git c.创建本地git仓库 -1 创建一个文件夹 mkdir lzptest pwd /home/opt/lzptest -2 git init创建一个本地git仓库 git init Initialized empty Git repository in /home/opt/lzptest/.git/ -3 从上面可以看出本地仓库位置为: /home/opt/lzptest/.git/ 其实:git clone就已经相当于创建了一个本地仓库, 看到存在.git文件,就是成功创建了一个本地仓库 并且,默认创建了master分支 ps: 将文件拷贝到本地仓库 git status git add . # 将文件提交到暂存区 git commit -m "upload xx file" # 将暂存区文件提交到本地仓库 # 如果已经执行过,忽略 git remote add origin https://github.com/liuzhipeng17/rest_framework_test.git # 在本地环境创建远程仓库 git push -u origin master # 将本地仓库:当前分支文件推送到远程仓库master分支 git push -u origin dev # 将本地创库:当前分支文件推送到远程仓库dev分支 d. 创建本地开发分支pc-product-dev, mkdir lzp -- lzp和.git同级目录 cd lzp git checkout -b pc-product-dev origin/pc-product-dev e. 关联远程仓库开发分支pc-product-dev git branch --set-upstream pc-product-dev origin/pc-product-dev f. 将远程分支dev的代码拉取到本地分支dev上 git checkout pc-product-dev git pull d. 上传文件到本地仓库(还没有提交到git服务器呢) -1 在本地git仓库下(即/home/opt/lzptest/目录下)创建一个文件temp.txt /home/opt/lzptest/temp.txt -2 git add temp.txt # 可多次使用git add,添加多个文件 # 一次性添加多个文件 git add **/**.java -3 git commit -m “add temp.txt” ps: git add temp.txt 是将temp.txt修改推送到本地git的暂存区 git commit 是将暂存区所有内容提交到本地仓库的当前分支 git push origin master是将本地仓库当前分支内容推送到远程仓库的master分支 # git服务器创建仓库(远程仓库) 省略 # 配置本地仓库和远程仓库同步(这样以后就可以实现推送文件到远程仓库) git remote add origin git@pha.ectrend.com/source/mobile-ecmagnet.git # 将本地仓库内容推送到git服务器远程库 # 第一次推送本地master分支到远程仓库master分支,需要-u参数 git push -u origin master #git push默认是将本地master分支推送到远程仓库(哪个分支,是看origin后面的参数) # 之后,推送本地master分支到远程仓库master分支 git push origin master # 部署环境(克隆代码) a.用户向git服务器提供公钥,使得下载代码时不需要提供代码 即用户在自己的客户端执行ssh://git@pha.ectrend.com/source/mobile-ecmagnet.git, 不需要密码 - 用户的公钥存放在哪 # 公钥和私钥是一对的(xxx 和xxx.pub,比如: id_rsa和id_rsa.pub, id_rsa_osc和id_rsa_osc.pub) # 只要一个公钥即可 - 公钥存放的位置,ls ~/.ssh - 如果用户没有.ssh目录,或者没有秘钥。生成一个秘钥 ssh-keygen -t rsa -C "youremail@example.com" - 然后拷贝公钥(git服务器需要) cat ~/.ssh/id_rsa.pub b. git服务器如何使用客户端提供的公钥(目的是身份验证) - 管理---》编辑设置---》身份验证---》ssh公钥---》SSH Key Actions---》上传公钥 c. 客户端免密码下载代码,克隆岛本地仓库 git clone ssh://git@pha.ectrend.com/source/mobile-ecmagnet.git d. 安装第三包 install -r requirements.txt # 分支管理 - 经典网站 https://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001375840038939c291467cc7c747b1810aab2fb8863508000 - 远程仓库的master分支是面向提交,head指向当前分支 - 分支管理指令 查看分支: - 查看本地仓库分支 git branch - 查看远程仓库分支 git remote show origin 创建分支: - 创建本地仓库分支 git branch <name> 切换分支:git checkout <name> 创建+切换分支:git checkout -b <name> 合并某分支到当前分支:git merge <name> 删除分支:git branch -d <name> 将本地当前分支推送远程仓库分支 git push origin test # 不考虑分支的拉代码和上传代码 git pull git push origin master # 考虑分支的拉代码和上传代码 -- 但是我们在团队合作中修改bug时候或者是做一个功能的时候, 我们肯定不会继续在主分支里面修改,得创建新的分支。 假设远端仓库有分支:master和dev -- 新建一个文件夹lzp, git clone: -- 创建和git远程仓库对应的分支 a. 创建本地仓库分支 git branch # 先查看有本地哪些分支 git branch pc-product-dev # 创建pc-product-dev分支 # ecmagnet的本地仓库 /home/vagrant/mobile-ecmagnet # ecmagnet远程仓库http://pha.ectrend.com/
批正: git remote add origin https://github.com/liuzhipeng17/rest_framework_test.git # 在本地环境创建远程仓库, (错误)
应该是给远程仓库 https://github.com/liuzhipeng17/rest_framework_test.git 起别名origin, 以后origin就代指https://github.com/liuzhipeng17/rest_framework_test.git
强烈 学习推荐网站:http://www.cnblogs.com/wupeiqi/p/7295372.html
#2 git 回滚教程
# 工作区,版本库 本地工作目录: 工作区workspace 版本库: 暂存,分支 git add file.txt --->将file.txt提交到暂存区 git commit ---> 将暂存区所有的内容提交到分支上 # git 回滚功能: -- 首先git log 查看最近几次修改 commit dfe39fa5fc55a32e42b736ffac9ef0b9ecb676ea # 第二次提交 Author: liuzhipeng17 <liucpliu@sina.cn> Date: Fri Dec 8 04:05:11 2017 +0000 update codes procurement_sovled_count commit 44ad176516b5b33bd699418c7ff8ff30fce32ab2 # 第一次提交 Author: liuzhipeng17 <liucpliu@sina.cn> Date: Fri Dec 8 02:02:54 2017 +0000 add api which counts procurments have been solved 很明显现在工作区的内容为update codes procurement_sovled_count -- 回滚到提交了api后的状态,工作区的内容就不会有更新后的内容 git reset --hard 44ad176516b5b33bd699418c7ff8ff30fce32ab2 root@vagrant-ubuntu-trusty-64:# git reset --hard 44ad176516b5b33bd699418c7ff8ff30fce32ab2 HEAD is now at 44ad176 add api which counts procurments have been solved -- 某天又想回滚到update codes procurement_sovled_count, 可不能用git log 来查看了, 而是git reflog --- git log root@vagrant-ubuntu-trusty-64:/opt/mobile/lzptest/mobile-ecmagnet/mobile_ecmagnet/quote# git reflog 44ad176 HEAD@{0}: reset: moving to 44ad176516b5b33bd699418c7ff8ff30fce32ab2 dfe39fa HEAD@{1}: commit: update codes procurement_sovled_count 44ad176 HEAD@{2}: commit: add api which counts procurments have been solved 30d11a4 HEAD@{3}: checkout: moving from master to pc-product-dev 3108968 HEAD@{4}: clone: from ssh://git@pha.ectrend.com/source/mobile-ecmagnet.git --- git reset --hard dfe39fa #注意 dfe39fa HEAD@{1}: commit: update codes procurement_sovled_count
git add file.txt --->将file.txt提交到暂存区 批正:将工作区file.txt提交到暂存区
放弃工作区的修改:git checkout -- test.html 放弃本地工作区test.html的修改
#3 git branch管理教程
# git 分支branch #需求: -- 平台原来的PC功能:趋于稳定,但是会有bug -- 平台需要开发新功能: 微信开发; 预期两个月完成 -- 可能会出现微信开发到一半,修复PC的bug #解决方案--branch git branch dev # 创建分支,并拷贝当前分支master的代码到dev分支 git checkout dev # 切换到dev分支 vim app02/view.py # 开发新功能 # 新功能开发完毕后 git checkout dev git add . git commit -m "新功能开发完毕" # 一定要commit,不然 git checkout master git merge dev #将dev分支内容合并到master分支 # 情况2 git branch dev git checkout dev vim app02/view.py # 微信新功能开发到一半 git checkout dev git add . git commit -m "新功能开发一半" # 不要合并到master,只要在新功能开发完毕后,才merge到masetr # 紧急解决PC bug git checkout master git branch bug git checkout bug vim bug/views.py git add . git commit -m "紧急修改bug,完成" git checkout master git merge bug #并将bug合并到master # 回到微信新功能开发 git checkout dev vim app02/views.py # 微信新功能继续,并完成 git add . git commit -m "继续开发完成" # 合并微信新功能到master git checkout master git merge dev # git merge 有时候会有冲突,需要手动修改 bug 相比master增加了一句: print "紧急修改bug" 而dev没有这一句,所以合并到master会报错,此时只有: 在dev增加同样的位置增加这一句, print "紧急修改bug"。 然后在合并 # ps 分支常用命令 git branch 分支名称 创建分支 git checkout 分支名称 切换分支 git branch -m 分支名称 创建并切换到指定分支 git branch 查看所有分支 git branch -d 分支名称 删除分支 git merge 分支名称 将指定分支合并到当前分支
#4 git代码托管
# git代码托管 ,github 或者公司的远程仓库http://pha.ectrend.com/source/mobile-ecmagnet/ 以github为例 # 公司创建github的仓库 --忽略 # 创建自己的本地仓库 cd /opt git init # 在家,将系统代码推送到github仓库 cd /opt git remote add origin https://github.com/WuPeiqi/pondo.git # 为地址起一个别名origin git push origin master:master # 将当前分支master内容推送到远程master分支 # 要求输入名字(除非你做了公钥) git push origin dev # 将当前分支dev内容推送githu的dev分支 # 在公司,开发新功能1 # 第一次使用,先下载代码 git clone https://github.com/WuPeiqi/pondo.git cd /opt git branch dev origin/dev # 创建分支并和远程分支同步 , git branch dev 也行, git checkout dev vim newfunction.py git add . git commit -m "公司新功能开发1" git push origin dev:dev # 提交到远程dev # 回到家后,要拉最新代码,继续开发新功能1 git checkout dev git pull origin dev vim newfucntion.py # git add . git commit -m "家里新功能开发1" git push origin dev # 在公司 git checkout dev git pull origin dev git merge origin/dev # 这个是将远程分支的内容合并到当前版本库的分支上 git merge的理解: git merge dev , 将是将dev分支合并到当前分支, (所以可能在本地仓库的master和dev合并,也有可能是远程仓库origin/dev 和本地dev的合并 【git pull origin 分支】命令等同于【git fetch origin 分支】+ 【git merge origin/分支】,并且在执
#5 git merge(很重要)待补充
#6 git diff 查看不同
# 查看修改部分(工作区,暂存区,本地仓库,远程仓库) -- Git diff 用于比较两次修改的差异 1.1 比较工作区与暂存区 git diff 不加参数即默认比较工作区与暂存区 1.2 比较暂存区与最新本地版本库(本地库中最近一次commit的内容) git diff --cached [<path>...] 1.3 比较工作区与最新本地版本库 git diff HEAD [<path>...] 如果HEAD指向的是master分支,那么HEAD还可以换成master 1.4 比较工作区与指定commit-id的差异 git diff commit-id [<path>...] 1.5 比较暂存区与指定commit-id的差异 git diff --cached [<commit-id>] [<path>...] 1.6 比较两个commit-id之间的差异 git diff [<commit-id>] [<commit-id>]
#7 windows如何生成公钥
windows下如何github ssh 公钥 1. 安装git,从程序目录打开 "Git Bash" 2. 键入命令:ssh-keygen -t rsa -C "email@email.com" "email@email.com"是github账号 3. 提醒你输入key的名称,输入如id_rsa 4. 在C:Documents and SettingsAdministrator下产生两个文件:id_rsa和id_rsa.pub 5. 把4中生成的密钥文件复制到C:Documents and SettingsAdministrator.ssh 目 录下。 6. 用记事本打开id_rsa.pub文件,复制内容,在github.com的网站上到ssh密钥管理页面,添加新公钥,随便取个名字,内容粘贴刚 才复制的内容。 7. ^_^ OK了 需要注意步骤2中产生的密钥文件在当前用户的根目录,必须把这两个文件放到当前用户目录的“.ssh”目录下才能生效。 在windows中只能在命令行下输入创建"."开头的文件夹。命令为 mkdir .ssh
#7 git 原理图