Git、Github/Gitee
版本控制
常见的版本控制工具
Git
SVN
CVS
VSS
TFS
Visual Studio
版本控制
本地版本控制
-
集中版本控制
所有的版本数据都保存在服务器上,协同开发者同步更新或上传自己的修改
-
分布式版本控制 GIT
每个人都拥有全部的代码!存在安全隐患!
不会因为服务器损坏或者网络问题,造成不能工作的情况
Git 与SVN 的区别
SVN是集中版本式版本控制系统,版本库是放在中央服务器上的,而工作的时候,用的都是自己的电脑,所以首先要从中央服务器得到最新的版本,然后工作,完成工作后,需要把自己做完的活推送到中央服务器。集中式版本控制系统是必须联网才能工作,对网络宽带要求较高。
GIT是分布式版本控制系统,没有中央服务器,每个人的电脑就是一个完整的版本库,工作的时候就不需要联网,因为版本都在自己的电脑上。协同的方法是这样的,比如说自己在电脑上改了文件A,其他人也在电脑上改了文件A,这时,你们两之间只需要把各自的修改推送给对方,就可以互相看到对方的修改了。Git可以之间看到更新了哪些代码和文件。
Cit是目前世界上做先进的分布式版本控制系统。
Git 历史
Bitkeeper => Git(Linux社区 大佬开发)
Git环境配置
卸载
直接反安装即可,然后清理环境变量,环境变量只是为了全局使用而已
下载对应的版本即可安装!
安装成功后再菜单中会有Git项,菜单下有三个程序:任意文件下右键也可以看到对应的程序
Git Bash:Unix与Linux 风格的命令行,使用最多,推荐最多
Cit CMD: windows风格的命令行
Git GUI: 图形界面
基本的Linux命令学习
cd: 改变目录
cd .. (cd 与 .. 之间加空格)回退到上一个目录,直接cd进入默认目录
pwd 显示当前所在的路径
ls(ll) 都是列出当前目录中的所有文件,只不过ll(两个ll)列出的内容更加详细
touch :新建一个文件 如touch index.js 就会在当前目录下新建一个index.js文件
rm 删除一个文件 如 rm index.js 就会把index,js 文件删除
rm-rf/ 切勿在Linux中尝试,删除电脑中全部的文件
mkdir 新建一个目录,就是新建一个文件夹
rm-r 删除一个文件夹。rm-r src 删除src目录
mv 移动文件,mv index.html.src.html 是我们要移动的文件,src是目标文件夹
reset 重新初始化终端 相当于clear
clear 清屏
history 查看历史命令
help 帮助
exit 退出
'#'表示注释
Git配置
所有的配置文件,其实都保存在本地
查看配置
查看不同级别的配置文件
查看系统config
git config --system --list
查看当前用户(global)配置
git config --global --list</pre>
Git相关的配置文件
1)D:\Tool\Git\etc: Git目录下的gitconfig --system 系统级
2)只适用于当前登录用户的配置 --global全局
设置用户名与邮箱
当你安装好Git后首先要做的是事情是设置你的用户名称和e-mail 地址。这是十分重要的,因为每次GIt提交都会使用该信息。他被永远的嵌入到了你的提交中
git config --global user.name 名称
git config --glabal user.email 邮箱
Git基本理论
工作区域
- Workspace:工作区,就是平时存代码的地方
- index/Stage: 暂存区,用于存放平时的改动,事实上它只是一个文件,保存即将提交到文件列表信息
- Repository: 仓库区(或本地仓库),就是安全存放数据的位置,这里有你提交的所有版本的数据。其中HEAD指向最新放入仓库的版本
- Remote:远程仓库,托管代码的服务器,可以简单的认为是你项目组中的一台电脑用于远程数据交换
本地的三个区域确切的说应该是git仓库中指向HEAD指向的版本
工作流程
git的工作流程一般是这样的:
1、在工作目录中添加、修改文件; Userml
2、将需要进行版本管理的文件放入暂存区域;git.add
Mapper.x3、将暂存区域的文件提交到git仓库。 git commit
因此,git管理的文件有三种状态:已修改(modified),已暂存(staged),已提交(committed)
Git项目搭建
创建工作目录和常用指令
工作目录(WorkSpace)一般就是你希望Git帮助你管理的文件夹,可以是你项目的目录,也可以是一个空目录,建议不要有中文。
本地仓库搭建
创建本地仓库的方法有两种:一种是创建全新的仓库,另一种是克隆远程仓库。
在当前目录新建一个Git代码库
git init
- clone时选择HTTPS web url,避免使用SSH一般来说应该就可以了
2、执行后可以看到,仅仅在项目目录多出了一个.git目录,关于版本等的所有信息都在这个目录里面。
克隆远程仓库
克隆一个项目和它的整个代码历史(版本信息)
git clone [url] https://gitee.com/zhou-feifan_busifan/test_ropeok.git</pre>
注意
Git文件操作
文件的四种状态
- Untracked: 未跟踪, 此文件在文件夹中, 但并没有加入到git库, 不参与版本控制. 通过git add 状态变为Staged.
- Unmodify: 文件已经入库, 未修改, 即版本库中的文件快照内容与文件夹中完全一致. 这种类型的文件有两种去处, 如果它被修改, 而变为Modified. 如果使用git rm移出版本库, 则成为Untracked文件
- Modified: 文件已修改, 仅仅是修改, 并没有进行其他的操作. 这个文件也有两个去处, 通过git add可进入暂存staged状态, 使用git checkout 则丢弃修改过, 返回到unmodify状态, 这个git checkout即从库中取出文件, 覆盖当前修改 !
- Staged: 暂存状态. 执行git commit则将修改同步到库中, 这时库中的文件和本地文件又变为一致, 文件为Unmodify状态. 执行git reset HEAD filename取消暂存, 文件状态为Modified
">最常用的提交命令
查看指定文件状态
git status [filename]
查看所有文件状态git status
git add . 添加所有文件到暂存区
git commit -m "消息内容" 提交暂存区中的内容到本地仓库 -m 提交信息
git push</pre>
忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立".gitignore"文件,此文件有如下规则:
- 忽略文件中的空行或以井号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,...})代表可选的字符串等。
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
为注释*.txt
忽略所有 .txt结尾的文件,这样的话上传就不会被选中!!lib.txt
但lib.txt除外/temp
仅忽略项目根目录下的TODO文件,不包括其它目录tempbuild/
忽略build/目录下的所有文件doc/*.txt
会忽略 doc/notes.txt 但不包括 doc/server/arch.txt</pre>
使用码云
github 是有墙的,比较慢,在国内的话,我们一般使用 gitee ,公司中有时候会搭建自己的gitlab服务器
1、注册登录码云,完善个人信息
2、设置本机绑定SSH公钥,实现免密码登录!</mark>(免密码登录,这一步挺重要的,码云是远程仓库,我们是平时工作在本地仓库!)
进入 C:\Users\Administrator.ssh 目录
生成公钥ssh-keygen</pre>
3、<mark style="box-sizing: border-box; background: rgb(255, 255, 0); color: rgb(0, 0, 0);">将公钥信息public key 添加到码云账户中即可!</mark>
4、<mark style="box-sizing: border-box; background: rgb(255, 255, 0); color: rgb(0, 0, 0);">使用码云创建一个自己的仓库!</mark>
创建你的第一个仓库 - Gitee.com
Idea集成Git
1、新建项目绑定Git
- 将远程的git文件目录拷贝到项目
2.修改文件,使用idea操作Git
第一种方式:傻瓜式操作
新建文件时会提示是否添加到暂存区
- 添加到暂存区
- commit 提交
- push到远程仓库
Git分支
分支在GIT中相对较难,分支就是科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,我们就需要处理一些问题了!
列出所有本地分支git branch
列出所有远程分支git branch -r
新建一个分支,但依然停留在当前分支git branch [branch-name]
新建一个分支,并切换到该分支git checkout -b [branch]
合并指定分支到当前分支git branch -d [branch-name]
删除远程分支$ git push origin --delete
如果同一个文件在合并分支时都被修改了则会引起冲突:解决的办法是我们可以修改冲突文件后重新提交!选择要保留他的代码还是你的代码!
master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。
3提交测试
Git分支
分支在GIT中相对较难,分支就是科幻电影里面的平行宇宙,如果两个平行宇宙互不干扰,那对现在的你也没啥影响。不过,在某个时间点,两个平行宇宙合并了,我们就需要处理一些问题了!
列出所有本地分支git branch
列出所有远程分支git branch -r
新建一个分支,但依然停留在当前分支git branch [branch-name]
新建一个分支,并切换到该分支git checkout -b [branch]
合并指定分支到当前分支 git merge [branch]
删除分支git branch -d [branch-name]
删除远程分支 git push origin --delete [branch-name]
如果同一个文件在合并分支时都被修改了则会引起冲突:解决的办法是我们可以修改冲突文件后重新提交!选择要保留他的代码还是你的代码!
master主分支应该非常稳定,用来发布新版本,一般情况下不允许在上面工作,工作一般情况下在新建的dev分支上工作,工作完后,比如上要发布,或者说dev分支代码稳定后可以合并到主分支master上来。