git

1. git介绍和安装

1.首页功能写完了---》正常应该提交到版本仓库---》大家都能看到这个---》运维应该把现在这个项目部署到测试环境中---》测试开始测试---》客户可以看到目前做的情况

需要有版本仓库,来管理我们的代码

  - svn:比较老,公司基本不用

  - git:比较流行,做代码管理

2. git 能干什么?

完成,协同开发(多人一起开发)项目,帮助程序眼整合代码

  - 1.帮助开发者合并开发的代码

  - 2.如果出现冲突代码的合并,会提示后提交合并代码的开发者,让其解决冲突

  - 3. 做版本管理 ---》可以 把代码退回到某个版本

3. 安装git

  - 官方下载

  - 安装:一路下一步,都选默认的,可以修改安装路径,其他不需要修改

  - 验证安装;

    1. 在cmd中输入:git -v

      

     2. 在任意路径点击右键:能看到:

      git gui here:在此处打开一个git图形化界面

      git bash here:在此处打开一个命令窗口

2. git,github,gitlab,gitee介绍

文档:https://www.cnblogs.com/liuqingzheng/p/15328319.html

git :是一个软件,做版本管理和代码合并,有一些git命令

github:是一个网站,远程代码仓库,全球最大的开源代码托管网站,使用git的命令来上传下载代码

gitee:是一个网站,远程代码仓库,国内最大的开源代码托管网站,使用git的命令来上传下载代码

gitlab:是一个网站,公司内部搭建的代码托管平台,远程代码仓库,使用git的命令上传下载代码

3.git工作流程

分为工作区、暂存区、版本库

  - 工作区:git init 当前文件夹初始化成仓库,文件发生变化

  - 暂存区:文件的变更 ----》提交到暂存区

  - 版本库:把暂存区内容提交到版本库 ----》文件就被版本管理了。以后可以退回到某个版本

git 就是对文件进行管理 ---》代码也是文件

流程核心总结:

"""
1)有红色信息(工作区有内容),就执行 add 
2)全绿信息(内容全部在暂存区),才执行 commit
3)只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本
"""

如下图:

4.git常用命令

1.将已有的文件夹 - 初始化为git仓库

git init   # 初始化当前文件夹作为仓库
git init XX  # 初始化当前文件夹下XX作为仓库

2.设置用户(在本机设置一次全局即可)

后期使用远程仓库,可以区分是谁提交了代码

- 2.1  设置全局用户(针对所以仓库)
"""
 git config --global user.name '用户名'
git config --global user.email '用户邮箱'
注:在全局文件 C:\Users\用户文件夹\.gitconfig新建用户信息,在所有仓库下都可以使用
"""

  

当创建完成之后,会在C:\Users\用户文件夹\.gitconfig新建用户信息,如下图所示:

  

- 2.2  创建局部用户(只针对当前仓库)
git config user.name '用户名'
git config user.email '邮箱'

3. 查看仓库状态

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

git status:

  - 红色:仓库中新增了,或修改了某些文件,还没有提交到暂存区

  - 绿色:在暂存区有变化,还没有提交到版本库

4. 工作区内容提交到暂存区

空文件夹不会被git记录

把工作区变更,提交到暂存区了

有红色变成绿色

git add .              #  添加项目中所有文件
git add 文件名    # 添加指定文件

 

5. 提交暂存区内容到版本库

git commit -m "版本描述信息"    # 把暂存区所有内容,提交到版本库,被版本管理起来,以后可以回退,查看

6. 查看版本记录

git log        # 显示整个版本号
git reflog     # 这个版本号显示的简洁点

7. 切换版本

git reset --hard  版本号(可以截一小段)# 切换版本号

8. 只要被版本管理了(一定能要提交到版本库),以后无论如何操作,都能再退回到某个位置

9. 了解

git checkout .  # 把工作区变更删除
git reset HEAD  # 把暂存区,拉回到工作区
git reset --soft 23e9e095 # 版本号是上一个版本,把版本库内容拉回到暂存区
git reset --mix b23875   # 把版本库内容拉回到工作区,变红

5. git忽略文件

如果一个文件夹被git管理了,所以文件都会被管理,所以文件发生变化,都会变红

在一个文件夹中,可能有些文件,或文件夹不想被git管理,这时候需要设置过滤文件

使用方式:

  - 1. 在仓库目录下(其他目录下不要有),新建一个文件:.gitignore   

  

  - 2. 在里面写忽略文件或文件夹

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

        eg:
        a.txt:项目中所有a.txt文件和文件夹都会被过滤
        /a.txt:项目中只有根目录下a.txt文件和文件夹会被过滤
        /b/a.txt:项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
        *x*:名字中有一个x的都会被过滤(*代表0~n个任意字符)
        空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)
        """

需要被忽略的文件、文件夹:

 进行提交:

 提交完成,变绿色,在暂存区

 

注意:

  1. 忽略文件,在一开始就要忽略,如果已经被版本管理了,在忽略就没用了

  2. 如果之前没有被管理,且已经提交了,可以按照下面步骤做:

    删除---》提交到版本库---》再在忽略文件中加入

记住:

  迁移记录文件是否提交---》建议不提交
  **/migrations/*.py # 忽略迁移记录
  !**/migrations/__init__.py #不不忽略 __init__.py

6. git多分支

分支操作:

### 命令操作分支
#1. 创建分支
git branch dev 

#2. 查看分支
git branch

#3. 分支合并(可能经常用)
git merge dev

#4. 删除分支
git branch -d 分支名     # 不能在当前分支上,删除当前分支

#5. 分支切换
git checkout 分支名
"""
1)多个开发者都是在一个分支上进行开发,不出意外,该分支一定叫dev(协同开发)
2)如果出现一个特殊任务(敏感任务),与正常业务关系不紧密,甚至可能大的影响正常的dev分支开发,可以依赖dev开一个子分支,进行开发,开发完毕后合并到dev分支,再删除该分支即可
3)所有的开发任务都可以在dev分支上进行(除非公司硬性要求不能直接在dev分支开发,只能在dev子分支开发,测试通过后才能合并给dev)
"""

7. git远程仓库

远程仓库有:github、gitlab、gitee

远程仓库以:gitee 为例,目标:把luffy_api提交到远程仓库

1. 远程仓库是空的情况

  - 1. 在gitee上创建了仓库(确保仓库是空的)

  新建仓库:下面的什么都不用选,只要填写:仓库名称、路径即可

  

  选择HTTP:

  

  -2. 本地:git init

  

  -3. 本地:git commit -m 提交版本

  

  Git 全局设置:

    - git config --global user.name 'chen'

    - git config --global user.email 'chen@qq.com'

  -4. 指定远程仓库地址

    添加一个远程仓库,名字叫 origin 地址是 后面地址

    - git remote add origin https://gitee.com/maverick-lucky/luffy_api.git

  

  -5. 推送到远端

    - git push origin master  # 将本地的master分支推送到远端origin对应的地址

    #  会弹出:让你输入用户名和密码 -----》gitee的用户名密码

  

   

    

2. 远程仓库有东西的情况

  -1. 本地先不做仓库 -----》将 .git 文件夹删除

  - 2. 找个位置,把远程仓库内容下载下来

    - git clone  https://gitee.com/maverick-lucky/luffy_api.git

  -3. 把我们写好的代码,赋值到这个文件夹下

  -4. 提交到本地仓库

    - git add .

    - git commit -m 

  -5. 推送到远程仓库

    git push origin master

本地还没开始写代码,远端建仓库(有东西):

  - 把远端仓库下载下来,用pycharm打开,写代码--本地提交--提交到远程

现在公司里有个项目了,写了很多代码了,也用版本管理了

  - 远程仓库一定是空

  - 本地的不要删---》直接提交到远程---》远程也有之前的版本管理

在公司里,这些都不用你做,创建仓库,提交初始化的代码都是领导做好了

  - 你只需要从远程仓库,下载代码:git clone

  - 用pycharm打开,继续写--提交即可

7.1 普通开发者,使用流程

1. 领导会把你的账户添加为开发者

2. 下载代码到本地 ---》 在这个基础上开发

  - 方式一(命令):git clone https://gitee.com/maverick-lucky/luffy_api.git

  - 方式二:使用pycharm下载

    - 先配置git

  

  - 方式三:下载zip,下载后使用pycharm打开

3. 使用pycharm 打开

  - 写代码,先提交到本地仓库

  - 提交到远程仓库

8. ssh方式连接远程仓库

前面,提交、拉取代码都是走的https协议

公司内部,一般会走 ssh协议,以后不需要用户名密码了,只需要ssh的公钥和私钥(是非对称加密:加密用公钥,解密用私钥)

操作步骤:

  - 1. 生成公钥私钥(在cmd中执行下面的命令)

    ssh-keygen -t ed25519 -C "2209627577@qq.com"

  

   -2. 用户家路径,生成的公钥和私钥:C:\Users\Administrator\.ssh  在这个路径下:

  

   - 3. 复制公钥,配置在gitee上

    - 设置 ---》添加ssh公钥,把公钥粘贴,确认

  

  

  -4. 以后,在操作git,不需要用户名密码了(走的是公钥和私钥)----》 只针对我们自己的机器

  - 5. 把远程仓库的连接,修改成 ssh协议

    - git remote remove origin  # 把原来的remote的对应关系删除(之前的协议是HTTP)

    - git remote add origin git@gitee.com:maverick-lucky/luffy_api.git  #新增一个对应关系,协议是ssh 

  - 6. 以后本地改了代码,提交到本地版本库,想推送到远程仓库,直接:git push 即可,不需要在输入用户名密码了

    

总结:使用git流程

  - 1. 注册一个gitlab账户

  -2. 领导会把你加成开发者

  -3. 进入到你的家里,你就能看到这个项目了

  -4. 项目clone到本地:

    -https方式:git clone https://gitee.com/maverick-lucky/luffy_api.git

    -ssh方式:git clone git@gitee.com:maverick-lucky/luffy_api.git

  -5. 在本地生成公钥私钥,把公钥配置在gitlab

  -6. 以后,在pycharm中打开项目写功能,提交到本地,提交到远端即可

9. 协同开发

 

9.1 避免冲突

张三:改了 settings.py  第一行,提交了

李四:改了 settings.py 第二行,提交了

你也在改setting.py ,没有拉取代码,不知道他们提交了,动了第二行,但是跟李四代码不一样你要提交,必须先拉取,一拉,把张三的,李四的都会加到你代码中,就会出冲突

如果你想避免冲突,勤拉取代码

9.2 协同开发

同学一:
  git clone 项目
  pycharm打开
  写代码:__init__.py
  git add . # 当输入这个命令,执行失败是因为当前目录下有个venv文件夹--》删除这个文件夹
  git commit -m 'ss' # 提交到本地版本库
  git push origin master # 推不上去  要先git pull origin master

同学二:
在pycharm中改代码
改的不是同一个文件
  git add .
  git commit -m 'sasdfasd'
  git pull origin master # 由于我们改了不是同一个文件,不会冲突
  git push origin master # 把自己的推上去即可

"""
1)作为开发者,第一次同步项目(前台已经是项目开发者了)
     git clone 项目地址(https/ssh)

2)保证自己本地有dev分支,且与远程仓库版本同步(没有就自己新建)

3)本地开发的代码,必须add、commit到本地版本库后,才和远程仓库进行交互

4)交互顺序:必须 先拉(pull)后提(push)

5)必须切换到要交互的分支,在与远程同名的分支进行交互,如本地dev与远程dev交互
    git checkout dev  # 切换分支
    git add .
    git commit -m '本次提交的信息提示'
    git pull origin dev  # 先拉,先下载最新版本的分支
    git push origin dev # 在推送,在提交自己写好的版本
"""

10. 冲突解决

"""
1. 在远程仓库和本地仓库版本不一致时,拉取远程仓库版本到本地时,两个版本进入融合,可能会出现版本冲突

2. 定位冲突文件冲突代码,线下沟通冲突代码,整合代码解决冲突

3. 将解决冲突后的代码重新提交到本地版本库

4. 再拉去远程仓库,直到没有冲突,提交本地版本库到远程
"""

"""
<<<<<<< HEAD  # 冲突的开始
# 自己的代码
=======  # 分割线
# 别人的代码
>>>>>>> b63c408abd05b87fc492d40523240561999dba50  # 冲突的结束(版本)
"""

"""
1. 删除冲突相关标识:冲突的开始、分割线、冲突的结束(版本)
2. 线下沟通,根据实际需求完成代码整合
3. 测试整合后的代码

"""

"""
出现冲突的前提:
1. 不同开发者同时操作了同一文件
2. 并且在相同行写了代码
强调:有业务交际时,版本合并不一定会出现冲突相关的标识,但是可能会带着代码运行崩溃,所有理论上每一次版本合并,都要测试合并后的所有功能(及其之少的情况)
"""

 

10.1 多人在同一分支开发

同学一:
  git clone 项目
  pycharm打开
  写代码:__init__.py ,第五行,改成 print('阿斯顿发送到发')

  git add . # 提交至暂存区
  git commit -m 'ss' # 提交至本地版本库
  git push origin master # 推不上去 git pull origin master

同学二
在pycharm中改代码
改的是同一个文件,不同行 print('aaa')
  git add .
  git commit -m 'sasdfasd'
  git pull origin master # 由于我们改了是同一个文件,会冲突

冲突:

<<<<<<< HEAD # 下面是我的代码
print('asdfasdfads')
======= # 下面是别人代码
print('tang')

>>>>>>> 2174bd1a466536dda553ba3835cfd9768ae32be0 # 别人代码的版本号

解决:

1. 先删除报错,然后看代码,如果改的一样,就留别人的,把自己的代码删除

2. git add .

3. git commit -m 

4. git push origin master

 

10.2 合并分支

 操作步骤:

# 1. 创建dev分支,并在dev分支中进行操作
git branch dev

#切换分支
git checkout dev    # 在dev分支操作

# 写自己的代码

# 提交至暂存区,在提交到本地版本库
git add .
git commit -m 'dev操作描述'

# 2. 在master分支操作
git checkout master

# 在同一个文件中写自己的代码
# 提交至暂存区,在提交到本地版本库
git add .
git commit -m 'master操作描述'

# 合并分支出现冲突
git merge dev # 出现冲突
# 解决冲突
# 提交
git add .
git commit -m

 

posted @ 2023-10-10 21:40  Maverick-Lucky  阅读(23)  评论(0)    收藏  举报