git版本管理工具

文章目录

  • 一、环境搭建
    • 1.1 安装
    • 1.2 环境配置
      • 1.2.1配置全局账号
      • 1.2.2生成ssh key
      • 1.2.3 配置ssh key
    • 1.3 pycharm配置git
  • 二、git常用命令
    • 2.1 基础概念
    • 2.2 基础命令
    • 2.3 示例1-撤销(三种情况)
      • 2.3.1代码仅进行了修改
      • 2.3.2修改代码且add
      • 2.3.3 代码修改,已add、commit
      • 2.3.4 小结
  • 三、远程仓库管理
    • 3.1介绍
    • 3.2 首次上传本地仓库
      • 3.2.1说明
      • 3.2.2基本流程
      • 3.2.3小结
      • 3.3.4常见错误
  • 四、分支管理
    • 4.1 简介
    • 4.2常用命令
    • 4.3 示例
  • 五、实际项目
    • 5.1 gitlab

一、环境搭建

1.1 安装

  • 官网: https://git-scm.com/download
  • 下载缓慢,国内镜像地址:https://registry.npmmirror.com/binary.html?path=git-for-windows/
  • 选择对应系统的安装包
  • 下载后默认安装即可

验证是否安装正确:

windows/mac: 在命令行输入:git --version

结果可以看到当前的git版本:

C:\Users\gao>git --version
git version 2.40.1.windows.1

1.2 环境配置

首先需要一个github或者gitee的账号,去对应平台申请账号,申请之后为了本地可以与git进行代码管理即上传下载到gitee或者github,需要配置相应的账号信息。

windows 鼠标右键,选择 git bash here

在git bash 中进行对应的配置

1.2.1配置全局账号

  • 配置用户名:git config --global user.name "your name"

  • 配置邮箱:git config --global user.email "your email"

  • 验证配置结果:git config --global --list 或者 git config --global -l

1.2.2生成ssh key

输入命令: ssh-keygen -t rsa -C "[email protected]"

  • 连敲三次回车,会在对应目录生成公钥和私钥

  • git bash 中输入 ssh-keygen -t rsa -C "[email protected]",结果如下

    $ ssh-keygen -t rsa -C "[email protected]"
    Generating public/private rsa key pair.
    Enter file in which to save the key (/c/Users/19857/.ssh/id_rsa):  ## 公钥私钥的路径
    Created directory '/c/Users/19857/.ssh'.
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    ...
    The key's randomart image is:
    ....
    
  • 进入对应路径可以看到 公钥、私钥

    git 输入即打印,# 后为注释

    $ cd /c/Users/19857/.ssh/     # 进入对应路径
    $ ls    # ls展示路径下的文件
    id_rsa  id_rsa.pub
    

    其中 id_rsa 为私钥,id_rsa.pub为公钥

1.2.3 配置ssh key

在想要将本地的代码push到远程的仓库前还将1.2 环境生成的公钥配置到 gitee或者github,以gitee为例

  1. gitbash 首先查看是否已有公钥私钥

    $ cd ~/.ssh
    $ ls
    id_rsa  id_rsa.pub    # 说明已有公钥,id_rsa为私钥,id_rsa.pub为公钥
    

    如果没有需要输入git的项目目录输入 ssh-keygen -t rsa -C "[email protected]"生成

    打开公钥文件,复制公钥

  2. 登录gitee,进行配置操作

    点击右上角
    start
    头像
    设置
    安全设置
    ssh公钥

    新建公钥 保存复制的公钥即可

1.3 pycharm配置git

对于python 而言常用的编辑器是git,可以在pycharm中配置git

在pycharm 中 点击 左上角 file->setting->Version Control->git

可以看到 中上位置 Path to Git excutable 自动检测出了 git所在的安装路径

点击 test 按钮 可以 可以看到git 的版本则说明,pycharm正常使用git

二、git常用命令

2.1 基础概念

git提交分为三个区: 工作区、临时区(stage)、仓库(master:主分支)

本地的目录为工作区,在本地可以增删改查自己的文件,然后将修改后的文件添加add到临时区,最后commit到仓库中。

[工作区:test.txt]—git add—>[临时区stage] —git commit—>[仓库master]

2.2 基础命令

  • 创建仓库

​ 在文件根目录下输入命令(鼠标右键git bash here) :git init

  输入命令后会生成一个.git的隐藏文件
  • 提交到仓库

    • 提交到临时仓库:git add test.txt
    • 提交到仓库:git commit -m '本次提交的记录,提示信息'
  • 查看状态:git status

  • 查看改动:git diff

  • 撤销修改:git checkout -- xxx

  • 查看日志:git log

2.3 示例1-撤销(三种情况)

有时候我们在自己本地的工作区对代码进行了修改后发现存在一定的问题,需要进行撤销,分为以下三种情况

  1. 代码仅在本地进行了修改
  2. 代码本地进行了修改且add到了临时区stage
  3. 代码本地进行了修改且add后又commit到了仓库

2.3.1代码仅进行了修改

1.首先创建gitDemo文件夹

​ gitbash中输入 git init创建git本地仓库

​ 创建demo.py文件并输入以下内容(可任意输入)

print("hello world!")

2.接着在git bash(鼠标右键 git bash here)中 添加并提交代码

$ git add demo.py
$ git commit -m "新建demo.py 文件"
[master dc4fba4] 新建demo.py 文件
 1 file changed, 1 insertion(+)
 create mode 100644 demo.py

3.修改demo.py 如下:

print("hello world!")
print("hello  2323")

git bash 查看

$ git status
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        modified:   demo.py
no changes added to commit (use "git add" and/or "git commit -a")

可以看到demo.py 被修改了

$ git diff
diff --git a/demo.py b/demo.py
index e75154b..94ce0f2 100644
--- a/demo.py
+++ b/demo.py
@@ -1 +1,2 @@
-print("hello world")
\ No newline at end of file
+print("hello world")
+print("hello  2323")
\ No newline at end of file

如果输入有误需要 撤销修改

直接git checkout xxx.py 恢复本地文件

$ git checkout demo.py
Updated 1 path from the index

查看demo.py

print("hello world")

可以看到新增的print("hello 2323") 已被删除

2.3.2修改代码且add

此时demo.py 为

print("hello world")
err

git bash的操作:将文件add到了临时区(暂存区)

$ git add demo.py    # 这里误将文件添加到了临时区
$ git status		# 查看下状态
On branch master
Changes to be committed:   # 这里提示可以restore 恢复
  (use "git restore --staged ..." to unstage)
        modified:   demo.py
$ git restore --staged demo.py  # 恢复临时区的存储
$ git status   # 查看状态
On branch master
Changes not staged for commit:
  (use "git add ..." to update what will be committed)
  (use "git restore ..." to discard changes in working directory)
        modified:   demo.py   # 还是提示存在修改,因为工作区还是修改后的,如果要撤销需要工作区也撤销
no changes added to commit (use "git add" and/or "git commit -a")
$ git checkout demo.pymo   # 工作区撤销
error: pathspec 'demo.pymo' did not match any file(s) known to git
$ git checkout demo.py   # 工作区撤销
Updated 1 path from the index
$ git status   # 再次查看,已经恢复修改
On branch master
nothing to commit, working tree clean

2.3.3 代码修改,已add、commit

在最开始的demo.py 中增加一行 error,如下:

print("hello world")
error

git 命令操作:

$ git add demo.py   # 将修改后的代码add到了临时区
$ git commit -m 'modify demo.py add line "error"'  #将修改的错误代码提交到了仓库
[master b75cebd] modify demo.py add line "error"
 1 file changed, 2 insertions(+), 1 deletion(-)
$ git log    # 查看giy日志
commit b75cebdf2d829d0606bfbc158273871e73d44e75 (HEAD -> master)
Author: sailor823 <[email protected]>
Date:   Mon May 22 22:27:41 2023 +0800

    modify demo.py add line "error"   # 这里可以看到错误的修改记录,需要回退到前一个记录

commit 908734efceaeb88b0c86579937689ea204751192
Author: sailor823 <[email protected]>
Date:   Sun May 21 22:17:59 2023 +0800

    add file demo.py

$ git reset --hard HEAD^    # 回退到上一个版本
HEAD is now at 908734e add file demo.py
 
$ git log   # 再次查看,可以看到只有之前的提交记录
commit 908734efceaeb88b0c86579937689ea204751192 (HEAD -> master)
Author: sailor823 <[email protected]>
Date:   Sun May 21 22:17:59 2023 +0800

    add file demo.py

查看demo.py 可以发现文件也回到之间没有添加的样子

print("hello world")

2.3.4 小结

撤销回退的三种情况应对方法:

  1. 代码仅在本地进行了修改

    只需要从仓库checkout 下当前仓库的版本替换即可,git checkout demo.py

  2. 代码本地进行修改且add到了临时区

    1. 先从临时区恢复 git restore --staged demo.py
    2. 再在工作区进行回退 git checkout demo.py
  3. 代码本地进行了修改,然后add到了临时区,最后进行了代码提交commit

    只需要进行git reset 即可回退到上一个版本 git reset --hard HEAD^

    PS: ^ 代表回退到上一个版本

三、远程仓库管理

3.1介绍

git 本身为分布式版本管理工具,在局域网所有成员可以任意进行代码提交修改,但是如果不在局域网内则无法访问,因此可以将本地的仓库保存到一个云端的仓库,所有成员在进行本地仓库存储后可以push到远程的仓库中,其他成员可以直接pull将代码仓库拉取到本地。

PC3的操作
PC2的操作
远程仓库
PC1的git操作
add
commit
push
pull/push
pull/push
本地仓库
本地仓库
远程仓库
临时区
add
本地仓库
git其他操作

PC1 在本地建立仓库后可以将代码push 保存到远程的仓库,其他人则可以通过pull 拉取云端的仓库到本地,然后在本地编辑后也可以修改提交等git操作来管理自己的代码

3.2 首次上传本地仓库

3.2.1说明

在本地新建了仓库,需要将本地代码仓库上传的git服务器上

3.2.2基本流程

  1. 在gitee上新建一个仓库notebooks

    建立好了之后会有 展示基本的git 信息,我们是已有仓库,可以看到已有仓库的提示命令

    cd existing_git_repo  # 进入具体项目地址根目录,我们git init 的地方
    git remote add origin https://gitee.com/xxx/notebook.git   # 添加远程仓库地址
    git push -u origin "master"   # 提交代码,-u 并绑定到master主分支,后续可以直接git push
    
  2. 在本地仓库根目录打开gitbash,并绑定远程仓库信息

    $ git remote add origin https://gitee.com/username/notebooks.git  # 地址为仓库建立后的地址
    
  3. push代码到远程仓库

    $ git push -u origin "master"
    Enumerating objects: 3, done.
    Counting objects: 100% (3/3), done.
    Delta compression using up to 12 threads
    Compressing objects: 100% (3/3), done.
    Writing objects: 100% (3/3), 4.08 KiB | 4.08 MiB/s, done.
    Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
    remote: Powered by GITEE.COM [GNK-6.4]
    To https://gitee.com/xxxx/notebooks.git
     * [new branch]      master -> master
    branch 'master' set up to track 'origin/master'.
    

3.2.3小结

  1. 添加远程仓库的地址 git remoter add origin xxxx仓库地址
  2. git push提交代码:注意 第一次 -u origin "master"是为了将代码绑定到master分支,后续可以直接git push

3.3.4常见错误

  1. 添加远程仓库地址失败

    现象:error: remote origin already exists 表示已关联远程仓库,可以删除后重新关联

    1. 删除关联仓库:git remote rm origin
    2. 管理自己仓库地址:git remote add origin https://gitee.com/xxxxxx.git
  2. git push失败

$ git remote add origin https://gitee.com/sailor823/notebook.git
git push -u origin "master"
error: src refspec master does not match any
error: failed to push some refs to 'https://gitee.com/sailor823/notebook.git'

失败原因: 本地代码未 commit,现在本地 git add.git commit -m "xxx" 后在git push

四、分支管理

4.1 简介

​ 在实际开发中,可能会有多个版本需要维护,会创建多个分支进行维护;或者为了避免其他开发人员的影响,我们可以创建自己的分支进行开发,开发完毕后再合并到主分支中。

​ 在git 中使用类似指针的方法来跟踪保存每个分支,在使用git init命令进行初始化话后就会创建一个master分支,此时master指针会指向master分支的最新版本,其中HEAD始终指向当前正在使用的分支

版本迭代
版本3
版本2
版本1
master
HEAD

当创建一个新的分支dev后,会在原有的基础上,创建一个新的指针dev指向当前的最新版本节点。

版本迭代
版本3
版本2
版本1
dev
master
HEAD

如果在创建dev分支后需要切换到dev分支进行开发工作,会将当前分支切换到dev分支上即HEAD指向dev,之后进行的开发工作,版本迭代由dev指针进行版本跟踪,如下图所示

版本迭代
版本n
...
版本3
版本2
版本1
HEAD
dev
master

如果需要将分支修改的内容合入,只需要将master指向dev分支的最新节点,再让HEAD执行master即可,如下所示:

版本迭代
版本n
...
版本3
版本2
版本1
dev
master
HEAD

4.2常用命令

  • 创建分支: git branch dev

  • 切换到分支dev: git checkout dev

  • 合并分支:git merge dev (ps:需要切换回主分支)

  • 删除分支:git branch -d dev

4.3 示例

在示例中进行,创建分支后进行文件修改,分支上提交代码,之后合并到主分支上,最后将分支删除

  1. 仓库初始化
  2. 创建分支并在分支上进行代码修改
  3. 合入主分支并删除分支
PS E:\code\gitDemo> git init  # 初始化文件
Initialized empty Git repository in E:/code/gitDemo/.git/

在文件E:\code\gitDemo路径下添加文件demo.txt

git bash 查看并将文件添加、提交

# ===============1.仓库初始化====================
$ git add .  # add所有文件到暂存区
$ git commit -m "master create demo.txt"  # master提交到本地仓库
[master (root-commit) 247cd82] master create demo.txt
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 demo.txt
$ echo "master update demo.txt" > demo.txt  # master修改demo.txt
$ cat demo.txt   # 查看修改的内容
master update demo.txt
$ git add .  # 在master分支将修改后的内容add到暂存区
warning: in the working copy of 'demo.txt', LF will be replaced by CRLF the next time Git touches it
$ git commit -m "master update  demo.txt"  # master提交入库
[master 8cdf0c1] master update  demo.txt
 1 file changed, 1 insertion(+)
$ git log  # 查看日志
commit 8cdf0c100ee90142bc007d1c958733ebe34a945a (HEAD -> master)
Author: sailor823 <[email protected]>
Date:   Wed May 31 22:47:57 2023 +0800
    master update  demo.txt
commit 247cd82e020d605b068dd3a690fec3a4efe8b31b
Author: sailor823 <[email protected]>
Date:   Wed May 31 22:46:38 2023 +0800
    master create demo.txt
    
#==================2.创建分支并在分支修改=======================
$ git branch dev  # 创建分支dev
$ git branch  # 查看所有分支
  dev
* master   # * 号代表当前使用的分支
$ git checkout dev   # 切换分支到dev
Switched to branch 'dev'
$ git branch  # 查看是否切换成功
* dev   # 当前* 号在dev说明切换成功
  master
$ echo "dev update demo.txt">demo.txt  # dev修改文件
$ cat demo.txt  # 查看修改后的结果
dev update demo.txt
# 在dev分支进行 add、commit
$ git add .
warning: in the working copy of 'demo.txt', LF will be replaced by CRLF the next time Git touches it
$ git commit -m "dev update"
[dev c994a7f] dev update
 1 file changed, 1 insertion(+), 1 deletion(-)
# 查看日志
$ git log
commit c994a7f0c619440e4985f65534703049300be711 (HEAD -> dev)
Author: sailor823 <[email protected]>
Date:   Wed May 31 22:49:53 2023 +0800
    dev update  # dev修改的记录
commit 8cdf0c100ee90142bc007d1c958733ebe34a945a (master)
Author: sailor823 <[email protected]>
Date:   Wed May 31 22:47:57 2023 +0800
    master update  demo.txt   # master之前的修改
commit 247cd82e020d605b068dd3a690fec3a4efe8b31b
Author: sailor823 <[email protected]>
Date:   Wed May 31 22:46:38 2023 +0800
    master create demo.txt  # master最开始的创建记录
    
# =========3.切换分支并合并到主分支,删除分支dev=====================
$ git checkout master
Switched to branch 'master'
$ git merge dev  # 将dev分支合并到master分支
Updating 8cdf0c1..c994a7f
Fast-forward
 demo.txt | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
$ cat demo.txt   # 查看合并后的结果
dev update demo.txt  # 确实是dev修改的结果
# 删除分支
$ git branch -d dev
Deleted branch dev (was c994a7f).
$ git branch
* master   # 可以看到只有一个master分支

五、实际项目

5.1 gitlab

​ gitlab 是一个基于git实现的在线代码仓库软件,提供web可视化管理界面,通常用于企业团队内部协作开发,可以企业内部私有化部署,而github常用于开源项目,也可以建立私有仓库,但要收费,所以一般企业内部使用的是gitlab。

​ 使用gitlab 实现以下基本操作:

  1. 环境配置

    • 配置公钥:

      找到本地生成的id_rsa.pub(见1.2.2)配置到gitlab中(gitlab->头像->Preferecess-SSH keys),将公钥中的内容复制粘贴过去即可

  2. 克隆项目到本地

    在gitlab 点击对应的项目,点击进入项目后,点击Clone,保存连接,如:https://gitlab.stuq.ceshiren.com/mayunlong/python_code

    在本地PC的git bash中输入

    git clone https://gitlab.stuq.ceshiren.com/mayunlong/python_code

    就会将代码克隆到本地

  3. 创建分支

    $ ls    # 克隆的时候将整个项目包含路径一起克隆下来了
    demo/  DataStructre/  gitDemo/  notebooks/  python_code/
    $ cd python_code/   # 进入项目路径
    $ ls
    allure_video/                            interface_video/
    allure录播/                              pytest_demo/
    appium_demo/                             pytest_video/
    appium_video/                            python_demo/
    continuous_integreation/                 python_programming/
    gitlab.txt                               python_video/
    gitlab_pycharm.txt                       vue_fronted/
    hogwarts-aitest-mini-web-ing-v2-master/  web_video/
    interface/
    $ git branch  # 查看分支
    * master   # 当前只有一个,且当前使用分支是 master(注意*号)
    $ git branch sailor  # 创建分支dev
    $ git branch
    * master
      sailor  # 可以看到分支已创建
    $ git checkout sailor  # 切换分支
    Switched to branch 'sailor'
    

    方法二:

    $ git checkout -b test  # 创建并切换到test分支
    Switched to a new branch 'test'
    $ git branch
      master
      sailor
    * test
    
  4. 添加/修改内容

    在项目文件下添加一个文件如 testGitLab.txt

    $ git status   # 查看git状态
    On branch sailor
    Untracked files:
      (use "git add ..." to include in what will be committed)
            tetsGitLab.txt  # 可以看到我们新建了一个文件,目前还没add到暂存区
    
    nothing added to commit but untracked files present (use "git add" to track)
    $ git add .  # 将所有文件天际到暂存区
    
  5. 提交内容

    $ git commit -m "create testGitLab.txt"  # 提交文件到本地仓库
    [sailor 0754044] create testGitLab.txt
     1 file changed, 1 insertion(+)
     create mode 100644 tetsGitLab.txt
               second guess 'git checkout ' (default)
    $ git push  # 提交到远程的服务器
    fatal: The current branch test has no upstream branch.
    To push the current branch and set the remote as upstream, use
    
        git push --set-upstream origin test  # 第一次需要设置分支路径
    
    To have this happen automatically for branches without a tracking
    upstream, see 'push.autoSetupRemote' in 'git help config'.
    $ git push --set-upstream origin test  # 我这失败是因为没有push 权限
    warning: missing OAuth configuration for gitlab.stuq.ceshiren.com - see https://aka.ms/gcm/gitlab for more information
    remote: You are not allowed to push code to this project.
    fatal: unable to access 'https://gitlab.stuq.ceshiren.com/mayunlong/python_code.git/': The requested URL returned error: 403
    
  6. 更新本地仓库

$git pull

一般使用Pycharm进行仓库代码开发,pycharm也支持git管理

在用pycharm 打开项目,右下角 分叉树枝 点击后可以进行分支管理,左上角 ↙ 可以pull更新代码到本地,✓用于commit到本地仓库,↗用于push代码到服务器,

你可能感兴趣的:(版本管理,git)