Git的简单使用

一. Git与SVN

1.1 SVN

  SVN是集中式版本控制系统,版本库是集中放在中央服务器的,而干活的时候,用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器。

  集中管理方式在一定程度上看到其他开发人员在干什么,而管理员也可以很轻松掌握每个人的开发权限。不顾缺点很明显,如果中央服务器发生故障,那么所有人都要等服务器能正常使用时才能提交代码,一定程度上会对项目进度产生影响。

1.2 Git

  Git是分布式版本控制系统,那么它就没有中央服务器的,每个人的电脑就是一个完整的版本库,这样,工作的时候就不需要联网了,因为版本都是在自己的电脑上。既然每个人的电脑都有一个完整的版本库,那多个人如何协作呢?比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需把各自的修改推送给对方,就可以互相看到对方的修改了。
  下图就是分布式版本控制工具管理方式:

  

1.3 Git工作流程

  1.从远程仓库中克隆 Git 资源作为本地仓库。
  2.从本地仓库中checkout代码然后进行代码修改
  3.在提交前先将代码提交到暂存区。
  4.提交修改。提交到本地仓库。本地仓库中保存修改的各个历史版本。
  5.在修改完成后,需要和团队成员共享代码时,可以将代码push到远程仓库。

  注意:

  开发过程中要提交新功能时,一定要遵循先拉取(pull),再提交(push)
  1)提交新功能(先提交,提交后拉取,可能就会出现冲突)
    >: git add .
    >: git commit -m '提交新功能的信息说明'
  2)拉取远程仓库(不管本地是否已经和远程同步,每一次提交前都必须拉取)
    >: git pull 源名 分支名 => git pull origin master
  3)提交到远程仓库(现在是主分支)
    >:git push 源名 分支名 => git push origin master

二. Git的安装及使用

2.1 Git的安装及使用前准备

  这里未介绍可视化界面(如TortoiseGit)的安装 ,只介绍git的安装及使用,以及在pycharm中如何使用git。

  1. 首先去官网下载对应版本的git:

1.下载对应版本:https://git-scm.com/download
2.安装git:在选取安装路径的下一步选取 Use a TrueType font in all console windows 选项
3. 安装成功后桌面右键可以看到git菜单

   2. 搭建本地git仓库的两种方式

# 将已有的文件夹作为git仓库
>:  cd 目标文件夹内部
>:  git init

# 在指定目录下创建git仓库
>:  cd 目标目录
>:  git init 仓库名

   3. 配置操作git的用户信息

# 局部配置
>: git config user.name '用户名'>: git config user.email '用户邮箱'
    
注:在当前仓库下的config新建用户信息,只能在当前仓库下使用


# 全局配置
>: git config --global user.name '用户名'
>: git config --global user.email '用户邮箱'

注:在全局文件 C:Users用户文件夹.gitconfig新建用户信息,在所有仓库下都可以使用

 2.2 Git常用指令

  1. 查看仓库状态命令

# 当仓库中有文件增加、删除、修改,都可以在仓库状态中查看
>: git status  
    -- 查看仓库状态
>: git status -s  
    -- 查看仓库状态的简约显示

  2. 工作区操作

     通过任何方式完成的文件删与改可以撤销回滚。注意空文件夹时不会被git记录。
  工作区内容提交至暂存区:
"""
>: git add .  
    -- 添加项目中所有文件
>: git add 文件名  
    -- 添加指定文件
"""
  撤销暂存区提交:add的逆操作
"""
>: git reset HEAD .
    -- 撤销所有暂存区的提交
>: git reset 文件名
    -- 撤销某一文件的暂存区提交
"""
  撤销工作区的操作:改、删 (前提是目标文件使用add命令加入了暂存区):
"""
>: git checkout .
    -- 撤销所有暂存区的提交
>: git checkout 文件名
    -- 撤销某一文件的暂存区提交
"""

   提交暂存区内容至版本库(本地仓库):

git commit -m "版本描述信息"
  撤销版本库提交:commit的逆操作
"""
回滚暂存区已经提交到版本库的操作:
    查看历史版本:
        >: git log
        >: git reflog
    查看时间点之前|之后的日志:
        >: git log --after 2018-6-1
        >: git log --before 2018-6-1
        >: git reflog --after 2018-6-1
        >: git reflog --before 2018-6-1
    查看指定开发者日志
        >: git log --author author_name
        >: git reflog --author author_name
    回滚到指定版本:
        回滚到上一个版本:
            >: git reset --hard HEAD^
            >: git reset --hard HEAD~1
        回滚到上三个版本:
            >: git reset --hard HEAD^^^
            >: git reset --hard HEAD~3
        回滚到指定版本号的版本:
            >: git reset --hard 版本号
            >: eg: git reset --hard 35cb292
"""

   3. 过滤文件

  windows中过滤文件时,可以新建.gitignore文件,往里面添加文件的名字或相对路径的方式来实现。不过注意新建.gitignore时要在后面多加一个.

.gitignore.
# .gitignore 文件
# 1)在仓库根目录下创建该文件
# 2)文件与文件夹均可以被过滤
# 3)文件过滤语法

""" 过滤文件内容
文件或文件夹名:代表所有目录下的文件或文件夹都被过滤
/文件或文件夹名:代表仓库根目录下的文件或文件夹被过滤
目录/文件或文件夹名:代表特定目录下的文件或文件夹被过滤
"""

  4. 生成密钥

  使用ssh的方式配置远程源时,需要配置密钥:

# git bash中生成密钥的命令
  ssh-keygen -t rsa

  

  生成之后windows中公钥私钥默认保存在C:Users用户名.ssh下:

  然后将公钥中的内容复制出来,在远程仓库中配置即可。比如在GitHub中配置如下:

      

   点击New SSH key把自己的公钥复制进去即可,公钥是一台电脑配一次即可。

  

  5. 配置远程源

  远程源目前主要由三种,分别是Github、码云以及Gitlab,他们之间的使用都大同小异。可采用 https协议 或 ssh协议 与远程git仓库通信提交提交代码(一般都是项目负责人完成)

  https协议方式:

>: git remote add origin https://gitee.com/doctor_owen/luffy.git  # 配置远程源

>: git push -u origin master  # 提交本地仓库到远程源

  ssh协议

>: git remote add origin git@gitee.com:doctor_owen/luffy.git  # 配置远程源

>: git push -u origin master  # 提交本地仓库到远程源

  查看源及源链接信息:

>: git remote
>: git remote -v

# 删除源链接
>:  git remote remove 源名字 

    注意:origin远程源的源名,可以自定义;master是分支名,是默认的主分支。

  新建一个远程仓库的时候(比如GitHub),如果新建了README文件,那么本地仓库使用push时,会报错,而且会建议你push前使用pull,可是这时使用git pull origin master后push还是会报错。此时可以使用以下命令将README先同步到本地,然后再正常使用push即可。

git pull --rebase origin master

  6. 多分支操作

-查看分支
    -git branch     #查看本地分支
    -git branch -r  #查看远程分支

-新建分支
    git branch 分支名字   #新建本地分支
    
-同步到远程
    -提交,push:git push origin lqztest
-切换分支
    git checkout lqztest
-合并代码
    -切到主分支:git checkout master
    -git merge lqznew
-删除分支
    #删除本地
    git branch -d 分支名
    #删除远程
    git push origin --delete 分支名
        
-分支合并时冲突的解决
    -跟正常冲突解决一样

  7. 冲突解决

  冲突的存在实际上因为多人修改了同一行代码,当出现冲突时,使用pull下拉代码时会保存你的代码和远程的代码(前提是你工作区中写的代码用add和commit提交至了本地仓库,不然出现冲突时自己写的代码直接会没掉):

  这个时候出现冲突时与同事协商处理即可,最后将冲突解决之后的代码push至远程仓库。

  可以参考以下链接https://www.liaoxuefeng.com/wiki/896043488029600/900004111093344

2.3 在pycharm中使用git

  1 使用
  安装好pycharm后,如果Git安装在默认路径下,那么idea会自动找到git的位置,如果更改了Git的安装位置则需要手动配置下Git的路径。
  选择File→Settings打开设置窗口,找到Version Control下的git选项:
  选择git的安装目录后可以点击“Test”按钮测试是否正确配置。
  2 将工程添加至git
1)在pycharm中创建一个工程,例如创建一个python工程,名称为git-test,如下图所示:
2)创建本地仓库
  在菜单中选择“vcs”→Import into Version Control→Create Git Repository...
  选择工程所在的上级目录。本例中应该选择idea-projects目录,然后点击“OK”按钮,在工程的上级目录创建本地仓库,那么idea-projects目录就是本地仓库的工作目录,此目录中的工程就可以添加到本地仓库中。也就是可以把idea-git-test工程添加到本地仓库中。
选择之后在工具栏上就多出了git相关工具按钮:
2)将工程添加至本地仓库
  直接点击按钮
  将工程提交至本地仓库
然后点击“commit”按钮,将工程添加至本地仓库。 :
3)推送到远程
  在github上创建一个仓库然后将本地仓库推送到远程。
  在工程上点击右键,选择git→Repository→push,
  或者在菜单中选择vcs→git→push
  点击“Define remote”链接,配置https形式的URL,git形式的无法通过。然后点击OK
  点击“push”按钮就讲本地仓库推送到远程,如果是第一次配置推送需要输入github的用户名和密码。
  打开本地Windows的cmd命令窗口,输入 rundll32.exe keymgr.dll,KRShowKeyMgr 将之前存储的git提交时保留的用户名密码删除
  3 从远程仓库克隆
  在pycharm的设置中:
  关闭工程后,在Pycharm的欢迎页上有“Check out from version control”下拉框,选择git
  此处仍然推荐使用htts形式的url,点击“test”按钮后显示连接成功。
  点击OK按钮后根据提示将远程仓库克隆下来,然后倒入到Pycharm中。
  4 从服务端拉取代码
  如果需要从服务端同步代码可以使用工具条中的“update”按钮

 

2.4 Git团队开发流程

"""
管理员
1.管理员配置与线上账号密码系统的本地全局账号密码
>: git config --global user.name "doctor_owen"
>: git config --global user.email "doctor_owen@163.com"

2.本地初始化git仓库(可以建立一个项目架构)
    1)创建项目
    2)进入项目目录初始化仓库:
        >: git init
    3)提交代码到本地版本库
3.创建一个远程空仓库(码云)
4.将本地版本库同步到远程仓库
    1)在本地仓库内添加远程仓库源,源名默认就采用origin,就采用https协议即可
        >: git remote add origin https://gitee.com/doctor_owen/luffy.git
    2)将本地版本库提交到远程版本库,需要远程仓库账号密码
        >: git push -u origin master

开发者
5.要参与开发的成员配置本地全局账号密码
>: git config --global user.name "owen"
>: git config --global user.email "owen@163.com"

6.生成本机的SSH公钥提供给管理员
>: ssh-keygen -t rsa -C "owen@163.com"

管理员
7.添加开发者提供的公钥到 个人公钥 并非是 公钥,并给开发者提供远程仓库SSH地址
    仓库 => 管理 => 添加公钥 => 添加个人公钥
    SSH地址:git@gitee.com:doctor_owen/luffy.git

开发者
8.在本机任意合适位置clone远程仓库到本地
>: git clone git@gitee.com:doctor_owen/luffy.git

9.进入本地项目仓库进行开发,可以查看远程源
>: cd luffy
>: git remote -v
注:origin  git@gitee.com:doctor_owen/luffy.git (fetch) & (push)

10.开发过程中要提交新功能时,一定要遵循先拉取(pull),在提交(push)
    1)提交新功能(先提交,提交后拉取,可能就会出现冲突)
        >: git add .
        >: git commit -m '提交新功能的信息说明'
    2)拉取远程仓库(不管本地是否已经和远程同步,每一次提交前都必须拉取)
        >: git pull 源名 分支名 => git pull origin master
    3)提交到远程仓库(现在是主分支)
        >:git push 源名 分支名 => git push origin master
"""
View Code

  更多知识,比如TortoiseGit可视化工具的使用等见一下链接:

 https://note.youdao.com/ynoteshare1/index.html?id=1477b520800edbdb712d4fbb76ec125e&type=note

原文地址:https://www.cnblogs.com/maoruqiang/p/11197051.html