GIT版本控制(基础知识)

git版本控制

引题:随着项目越来越大,出现以下问题:
1.项目本来正确,加了些新功能或改bug,结果不知不觉影响到其他功能导致项目无法运行,再往回改又越来越多的问题.
2.无法查看较早历史版本.
3.多人协作,每个人的代码不完全一致,项目经理合并代码时容易出现问题.

主流工具

SVN: (有点像自动同步功能的网盘),特点服务器上维护共享文件,客户端下载(checkout检出); 客户端可以修改代码后在commit提交,也可以从服务器上update更新最新代码. SVN前些年,java项目,早期公司必用,但被GIT渐渐取代.
svn缺点:
1>有代码版本控制功能但因为没人使用,大家把它当做网盘使用.例如服务器最开始共享一个代码v1版本,分发给几个程序员,然后程序员A开发了一个功能,并提交v2.后面提交功能的人由于代码环境已变,自己开发的功能还需要费时调整.
2>服务器一旦崩溃,依赖服务器的客户端如果没有备份资料就丢失了.
(了解)git历史

GIT:避免了以上缺点,现在公司的主流.相关的生态github也非常流行.每一个代码提交的时间点都会打一个标签,每一个程序员开发后提交时都会检查与上一个最新版本的异同.每一个版本变更信息都会下载到每一个客户端.点对点网状形式拓扑.其中一个点出问题,可以从其他电脑恢复.

git

安装

官网下载,安装.向导涉及的名词在学习linux后会理解,无关紧要,全部保持默认点"next".

基本概念和命令

1.cd项目根目录
2.[常用]git init : 初始化git仓库,生成.git隐藏文件夹,负责跟踪项目文件变更.
3.[常用]git add [文件名] : 把一个文件添加到"暂存区",未添加的文件不会被跟踪,git相比svn,网盘多的概念就是"暂存区".
不太适合跟踪的文件有:测试语法的小脚本;依赖包;数据库
一个一个文件add太麻烦,git add . (跟踪所有文件)。
排除跟踪的文件可以在.gitignore中设置.
4.[常用]git commit -m “提交时描述信息” , 提交就好像是快照.
靠HEAD指针指向时间来管理不同时候提交的版本.每一次提交编一个唯一hash字符串标识.提交信息包含提交人和提交时间.
5.git log 查看文件变更状态和提交历史.
6.(第一次使用设置)git config --global user.email “你的邮箱”
git config --global user.name “你的名字”
7.git status 查看是否跟踪,是否变更.
8.git reset --head[提交id] , 版本回退
9.git diff HEAD --[file name] , 比较不同

分支

分支就好像影视作品里的平行世界,分支代码互不影响
作用: 1> 做分类 2> 开发新功能时新建分支dev,开发完成后再往master主分支上合并.
1.git branch [branch name] 新建分支
2.git branch 查看所有分支,高亮的是目前所在分支
3.git checkout [branch name] 切换到分支
4.在master分支下执行 git merge [dev] 把开发的新功能合并到master分支
5.git branch -b [branch name] 第1,3条命令缩写创分支并且检出(百度)

远程仓库

之前我们做的都是保存到本地,不够安全,希望上传到网络,并且网络可以多人协作和沟通.
知名的平台:
github(众多的开源软件) gitlab(体验好界面好,要求电脑配置,公司局域内可以搭建), 国内gitee码云(国内速度快),阿里code(跟阿里项目管理工具结合紧密)

以github为示例:
大体功能:git自带功能.watch项目有新内容时邮件提醒;star收藏;fork 克隆项目并上传成为自己的项目.

准备工作:
在使用推送,下拉功能时,github平台可能报错没有权限.因为没有配置指纹.htps和ssh,ssh协议更加安全.
ssh:secure Shell 直译安全壳,连接远程服务器的协议,ssl加密.主要应用远程登录云服务.git服务器.非对称加密,需要生成秘钥对,公钥交给第三方平台.
0.安装好git, 如果没有设置git信息设置一下
git config --global user.email “你的邮箱”
git config --global user.name “你的名字”
1.电脑本地生成秘钥对.
终端运行 ssh-keygen 命令,ssh key generate
一路回保持默认
c:/user/xxx/.ssh/ id_rsa.pub 公钥 id_rsa 私钥
2.把公钥文件用文本编辑器打开,把内容复制到github-个人-settings-ssh keys
3.找一个仓库 git clone git@github.com:canaan-yz/testgit3.git进行测试

1.克隆clone(下载)
git clone [仓库链接]
仓库链接https ssh,ssh链接需要在网站添加指纹
2.下拉(更新)(已下载前提下更新新内容)
git pull
3.参与到开源项目当中
自己开发,本地提交,平台上把自己提交作为pull requests(简称pr),项目管理员就会看到你的申请,觉得你代码没问题就会合并到主分支.
4.本地项目(上传)推送到github
(第一次上传)git push -u origin master
origin 约定俗称代表远程服务器github.com
(伪代码 git push -u local master origin master)
master远程分支
-u 把本地当前分支关联到远程master分支.注意本地分支名一般与远程分支名一致.
(以后上传)git push, 上传已经commit过的代码,没有commit过的仍然在电脑本地 . 第一次使用此命令报分支未跟踪错误.
情况一:github先创建空仓库,然后clone到本地,之后commit ,(因为是clone所以分支已经对应好了)git push
情况二(大多数):本地开发好了想上传,然后github创建空仓库,需要把本地和远程仓库对应一下,设置origin远程仓库地址,git push -u.
创建空仓库:起项目名一般与本地项目名一致.readme.md .gitignore 如果本地已有的话不要远程仓库不要创建,否则提交时冲突.license只是产权协议,不是特别正式的项目不需要.

5.解决冲突
两个程序员clone了一份程序,程序员A添加了功能并提交,程序员B修改跟A同样的一个文件并提交,这时发生代码冲突.B解决方案:放弃自己的修改,更新A的修改,在A的代码基础上在继续自己的开发.或是强行提交,覆盖A的代码.所以平时开发项目,最好先git pull 让本地代码最新,这样冲突概率最小,在开发新功能,平时注意跟同事事先沟通,开发完之后及时提交.

ide中以pycharm为例子中使用GUI

项目git init之后出现相关工具
红色文件表示未追踪
add后变为蓝色
commit后变为正常色

右上角
对号commit
向下箭头pull 时钟图标可以看文件历史git log
回转箭头 返回到最近一次提交
编辑区 右键 git-gitcompare可以查看当前文件跟某一版本的异同

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值