[ecmagnet][python基础]有关git那些事

#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/

    
View Code

 批正: 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
        
    
View Code

 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 分支名称              将指定分支合并到当前分支
    
    
    
    
    
    
    
    
View Code

 

#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/分支】,并且在执
    
    
    
View Code

 

#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>]

 
View Code

 

#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 Settings\Administrator\下产生两个文件:id_rsa和id_rsa.pub
5. 把4中生成的密钥文件复制到C:\Documents and Settings\Administrator\.ssh\ 目 录下。
6. 用记事本打开id_rsa.pub文件,复制内容,在github.com的网站上到ssh密钥管理页面,添加新公钥,随便取个名字,内容粘贴刚

才复制的内容。
7. ^_^ OK了

需要注意步骤2中产生的密钥文件在当前用户的根目录,必须把这两个文件放到当前用户目录的“.ssh”目录下才能生效。
在windows中只能在命令行下输入创建"."开头的文件夹。命令为 mkdir .ssh
View Code

 

 #7 git 原理图

 

 

posted @ 2017-11-27 18:13  liuzhipenglove  阅读(339)  评论(0编辑  收藏  举报