zoukankan      html  css  js  c++  java
  • [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 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
    View Code

     #7 git 原理图

     

  • 相关阅读:
    Controller返回值string、mv等区别
    CA证书目的和详细演化过程
    HashMap和Hashtable的区别
    操作系统-IO管理疑难点
    IO核心子系统
    操作系统-IO管理概述
    文件管理疑难点
    磁盘组织与管理
    文件系统实现
    文件系统基础
  • 原文地址:https://www.cnblogs.com/liuzhipenglove/p/7905426.html
Copyright © 2011-2022 走看看