GIT学习

代码管理软件
	-git
 	-svn
他们能做的事情---》咱们用来做代码管理[文件管理]
1.帮助开发者合并开发的代码,协同开发
2.如果出现冲突代码的合并,会提示后调教合并代码的开发者,让其解决冲突
3.代码版本管理

git与svn比较
	svn:集成式管理,服务端挂掉就做不了就做不了版本管理,代码合并
	git:分布式管理,服务端挂掉,本地还可以继续做版本管理,代码合并

git,gitee,github,gitlab

git:版本管理软件,装在操作系统上,有很多命令
 
gitee:远程仓库,开源代码,私有代码,有个网站,可以看到有哪些开源代码,通过网站做一些配置
	-国内最大的开源远程仓库
	-小公司---》使用gitee的私有仓库

github:远程仓库,开源代码,私有代码,有个网站,可以看到有哪些开源代码,通过网站做一下配置
    -国际最大的开源远程仓库

bitbucken:只有私有仓库
    -远程代码仓库
 
gitlab:公司内部的远程仓库

git使用流程

git软件安装

双击 安装软件,一路下一步安装完成
	-任意路径下点击右键,多出两个东西
	-cmd:git有反应

git工作流程

三个区:
    -工作区	存放文件的地方
    -暂存区	工作区的变更,提交到暂存区
    -版本库	暂存区的内容,提交到版本库
 
三个区互相操作:
    -下面学的命令,就是在操作这三个区

image

git常用命令

1.文件夹想被git管理,文件夹作为仓库
	# 先来到某个文件夹下敲
git init  # 初始化仓库,当前文件夹多出 .git文件夹,这个文件夹不要删,如果删除,这就不是git仓库了,之前的版本再也找不回来了,也不能被git管理

git init xxx # 在上一级敲

2.查看文件变化,在 .git文件夹下[只看暂存区和工作区]
	git status
    	# 看到有两种颜色
       -红色:工作区变化了,但是没有提交到暂存区
       -绿色:已经提交到暂存区,但是没有提交到版本库
       -没有,所有东西都在版本库中[所有文件都被git管理起来了]
  
3.把工作区变更提交到暂存区
	git add  文件夹  提交某一个文件夹内容到暂存区
	git add .   # 当前路径下所有变更都提交
 
4.把暂存区所有内容,提交到版本库作为一个版本
	git commit -m '提交了1.txt'
 
5.设置作者(全局,局部)
	# 全局的意思是当前操作系统下所有仓库,提交到版本库时,都用这个作者
    # 全局只针对于当前仓库
    git config --global user.email "306334678@qq.com"
    git config --global user.name "liuqingzheng"
    
6.查看版本库版本信息
	-git log 
 	-git reflog	# 更精简一些
   
--------了解---------
7.把工作区的变更,回退【还没有放到暂存区】
	-新增的内容,删除
 	git checkout .
8.把暂存区拉回到工作区【由绿变红】
	git reset HEAD
--------了解结束---------

9.回到某个版本
	-只要被版本管理了,可以回退到任意版本
  	git reset --hard 版本号
    
总结:
    需要记住的:
    	git	add
       git commit -m '注释'
    	git reset --hard 版本号
   	会用:
        git  init		初始化仓库
        git status		 查看文件变化
        git log			 查看版本库 
        git reflog
 	了解;
    	git checkout .		工作区变更回退
    	git reset HEAD		暂存区拉到工作区
    	git config --global user.email "306334678@qq.com"
     
"""
1.有红色信息(工作区有内容),就执行add
2.全绿信息(内容全部在暂存区),才执行commit
3.只有被版本库控制的代码,才能被监听,所以可以回滚到任何一个版本
注意:空文件夹不会被git记录
"""

git忽略文件

在项目中,有些文件或者文件夹不想被git管理
	-比如:
        -node_models
        -.idea
        -xx.pyc		# python的编译文件
    
使用步骤:
    -1 在仓库目录下 .git所在目录下 新建 .gitignore
    -2 在里面写忽略文件
    	mode_models
        .idea   # 忽略ieda结束的文件
        *.pyc   # 忽略所有pyc结尾的文件
        *.log   # 忽略所有log结尾的文件
    -3 写的就会被忽略
    -4 已经被管理过的不会被忽略
   
忽略文件写法:
 文件或文件夹名:代表所有目录下的同名文件或文件夹都会被过滤
 /文件或者文件夹名:代表仓库根目录下的文件或文件夹被过滤
 
例如:
a.txt:项目中所有a.txt文件和文件夹都会被过滤
/a.txt:项目中所有根目录下a.txt文件和文件夹会被过滤
/b/a.txt;项目中只有根目录下的b文件夹下的a.txt文件和文件夹会被过滤
*x*:名字中有一个x的都会被过滤(*代表o~n任意字符)
空文件夹不会被提交,空包会被提交,包可以被提交(包中有一个init空文件)

git多分支

为什么要有分支?
	-可以保证,主分支的版本都可以查看的版本
	-我们都在开发分支开发,开发完成,合并到主分支

本地分支操作

	-分支查看
    	git branch
   -分支创建
		git branch	分支名
       git branch  dev
   -分支切换
		git checkout dev  # 切换到dev分支
   -分支删除
		git branch -d dev  # 删除dev分支

本地分支合并

演示:把dev合并进master

-先切换到主分组master:git branch checkout master
-执行合并命令:git merge dev  # 把dev合并到我(master)份身上
	注意:分支合并可能会出现冲突 
        
  
公司里分支方案:
    -master分支,dev分支,bug分支,所有人在dev分支开发,开发完成合并到主分支
    -master分支,dev分支,bug分支,个人分支,个人在个人分支上开发,开发完成合并到dev分支

image-20230302153331211

git远程仓库

把本地的版本提交到远程仓库

gitee,github,gitlab。。。。
gitlab的搭建过程:https://zhuanlan.zhihu.com/p/413217715
    
操作步骤:
    本地:
        1.在luffy_api敲git init 初始化仓库
        2.设置忽略文件(.gitignore)
        3.git add .  将工作区提交到暂存区
        4.git commit -m '注释'  暂存区提交到本地库
       	 -----提交到了本地版本库-----被版本管理
    远程:
        1.远程要创建仓库:gitee上创建仓库,右上角 + 
        2.填一些信息,保证仓库是空的
    本地:
        1.安装远端提示的步骤操作
        2.设置用户和邮箱
        3.咱们是已有仓库
        dc luffy_api
        
     添加一个远程仓库地址名字叫origin,地址是xxx
     例如:  git remote add origin https://gitee.com/zhang-hong1229/origin.git
                
     把本地的版本库推送到远程仓库  
     把本地所在当前分支,推送到origin

提交了,再写忽略文件的步骤

    luffy.log--->暂存区---》版本库
    
    .gitignore---》写上忽略,但是不好被忽略,只要luffy.log有变化还是会被监控到
    
    删除luffy.log---》会被监控到---》add,commit---》版本库中已经没有luffy.log
    再出的luffy.log,就不会被管理了

ssh方式连接远程仓库

刚刚提交代码---》输入了用户名密码---》才可以提交上去---》使用的是https协议提交的代码
	-它需要输入用户名和密码

咱们要使用ssh方案,需要公钥和私钥   ---》公司里这种方式多
	-私钥在本地保存
   -公钥配置到gitee上
   -以后再提交代码,不需要其他任何认证了,一路绿灯

使用步骤

	-生成公钥私钥:https://gitee.com/help/articles/4181
    -在命令创建执行,一路回车
    ssh-keygen -t ed25519 -C "邮箱" 
     -生成在:C:\Users\Administrator\.ssh  两个文件,一个公钥,一个私钥
    -把公钥,配置在gitee上
    -之前origin对象的地址是 https的,现在要使用ssh提交代码,需要把它删除,再增加成ssh的协议
  例如:
    git remote remove origin
    git remote add origin git@gitee.com:zhang-hong1229/origin.git
    git push -u origin "master"

协同开发

仓库管理员创建了仓库,我对仓库有各种权限

我们要多人开发(张三,李四),张三李四在自己的仓库中,能看到我的项目吗? 答案:看不到
   
仓库管理员把张三李四设置为该仓库的开发者,设置完成后,在张三李四的仓库中就能看到这个项目了

仓库管理员,邀请开发者进入
	-邀请的开发者,对这个仓库就有读写权限,他们就可以开发代码,提交
   
作为开发者,本地没有代码:
    1.把代码从远程仓库 clone下来
    	git clone git@gitee.com:liuqingzheng/luffy_api.git
    2.使用pycharm打开,配置好解释器,安装依赖
    3.开发代码,开发完
    	git add
        # 设置用户名和邮箱
        git config user.name lqz
        git config user.email 3@qq.com
        
        git commit
        git push origin master
     
   
新人刚入职,步骤:
    1.自己注册(或者hr给你gitlab)账号和密码
    	-自己去自己的账号里,配置ssh
    2.老大会把一个仓库地址给你,【已经把你加成开发者了】
    3.clone下来代码
    4.使用pycharm打开,配置环境---》代码运行起来
    5.开发代码,本地提交---》push到远端
    	add
        commit
        push

冲突解决

出现冲突的原因:
    1 多人在同一分支开发
    2 分支合并出现冲突
    
多人在同一分支开发冲突:
    -张三:
        git pull origin master
        在requirements.txt,最后一行加入 lqz
        git add .
        git commit -m 
        git push origin master
        
        
        
    -我:
    	在requirements.txt,最后一行加入 lqz
        git add .
        git commit -m 
        git pull origin master  
   # 冲突了
# 解决冲突:冲突的箭头去掉,阅读代码,选择保留或删除别人或自己的代码,再提交
# 提交到远程仓库,这是解决后的
# 冲突出现的样子:你如果要删除别人的代码,你需要跟别人说一声
    <<<<<<< HEAD   我的代码
    print('刘亦菲')
    =======   它的代码
    print('彭于晏')
    >>>>>>> 6f720edbd84c8744b1c7c10767fb89a5d0fa98f5
   
避免出现冲突的方法:
    -你如果想少出现冲突,勤拉取代码
    
  
冲突出现的原因2:分支合并出冲突
    -我:
		1 创建dev分支 
			git branch dev
        2 在dev分支的views.py 中第2行加入代码
        
        3 提交到本地仓库
        
        
   -我:
	  1 在主分支的views.py 中第2行加入代码
      2 提交到版本库
        
      3 在主分支合并代码  git merge dev
      4 冲突了,解决冲突
      5 再提交代码,到此结束

线上分支合并

线下分支合并
	git merge dev 
 
线上分支合并
	-gitee上,新建一个分支,点点点创建出来
   -本地同步远程dev分支
	git pull origin dev # 拉下来了,还看不到,只有且过去,才看的到
   git checkout dev 	# 切换到dev分支
   
    随便加代码
    	git add
       git commit 
    	# 提交到本地的dev
     
    -推到远端 dev
    	git push origin dev
    -master中没有代码,dev中有提交,现在要线上分支合并
    -把远程的dev合并进远程的master
    -提交pr
    -在网站上,申请提交pull request
    -领导审核,测试,通过后,点击合并
    -线上dev合并进线上的master

远程仓库回滚

# 不要用
# 想远程的代码,是最初的状态

# 步骤:
	1 本地版本回退
     git reset --hard 版本号
        
    2 强行推到远端
    git push origin master -f

GIT指令大总结

指令 作用
git add 工作区上传暂存区
git commit -m '注释' 暂存区上传版本库
git init 初始化仓库
git reset --hard 版本号 回退到某个版本
git status 查看文件变化
git log 查看版本库
git reflog 查看版本库
git checkout . 工作区变更回退
git reset HEAD 暂存区拉到工作区
.gitignore 本地建立忽略文件
git branch 查看分支
git branch 分支名 新建分支
git checkout 分支名 切换分支
git branch -d 分支名 删除分支
git merge 分支名 合并分支(分支合并到master)
git remote add origin https://gitee.com/zhang-hong1229/origin.git 添加远程仓库https传输
git push origin master 本地版本库推到远程库
git remote remove origin 移除origin远程仓库
git remote add origin git@gitee.com:zhang-hong1229/origin.git 添加远程仓库ssh传输
git pull origin 远程分支名(如:master) 将远程仓库内容拉取到本地
git clone git@gitee.com:lizhi-cn/database-building-test.git 克隆某个地址的代码

为开源项目贡献代码

# github,gitee 看到好的开源项目,  发现有bug,为他增加新功能---》你加入了代码---》想合并进开源项目,如何做

# 步骤:
	1 先fork开源项目--》复制这个项目到我的仓库中
    2 clone下来,改代码,一路提交到远端(我的)
    3 提交pr,等作者同意

pycharm使用git

只要用命令操作的,都可以点击完成

先配置pycharm使用git

image

image

image

image

image

image

image

image

gitlab相关

git init --initial -branch=main   添加远程仓库
git remote_add origin git@192.168.1.63:zhanghong/myapi.git
posted @ 2023-03-01 17:14  雪语  阅读(29)  评论(0编辑  收藏  举报