git:版本控制系统
常用命令
cd .. 返回上级文件夹
cd + 文件夹名 进入当前目录某文件夹
ls 显示当前目录所有文件夹及文件名
ll 相较于ls更加详细
pwd 显示完整的当前所在目录
clear 清屏(windows为 cls)
reset 与clear差不多
rm + 文件名 删除某文件
mkdir + 文件夹名 新建某个文件夹
rm -r + 文件夹名 删除某个文件夹
touch + 文件名 新建某个文件
move + 文件名 +文件夹名 将该文件移动到该文件夹下
history 查看所有历史命令
git配置
安装git后必须要进行用户配置
配置用户名命令:git config --global user.name "xxxxx"
配置邮箱命令: git config --global user.name "xxxxx"`
1、为什么要配置用户名和邮箱?
因为Git是分布式版本控制系统,所以,每个机器都必须自报家门:你的名字和Email地址(名字和邮箱都不会进行验证),这样远程仓库才知道哪次提交是由谁完成的
你也许会担心,如果有人故意冒充别人怎么办?这个不必担心,首先我们相信大家都是善良无知的群众,其次,真的有冒充的也是有办法可查的
2、配置的用户名和邮箱对push代码到远程仓库有什么影响?
首先,配置的用户名和邮箱对push代码到远程仓库时的身份验证没有作用,即不用他们进行身份验证;他们仅仅会出现在远程仓库的commits里
其次,按正常操作来说,你应该配置你的真实用户名和邮箱,这样一来在远程仓库的commits里可以看到哪个操作是你所为
最后,这个用户名和邮箱是可以随便配置的(不提倡)
如果你配置的邮箱是github里真实存在的邮箱,则commits里显示的是这个邮箱对应的账号
如果配置的邮箱是一个在github里不存在的邮箱,则commits里显示的是你配置的用户名。
关于配置常用命令
查看配置: git config -l
查看系统配置:git config --system --list
查看用户配置:git config --global --list
git基本理论
- Workspace:工作区,平时存放代码的地方
-
Index/Stage:暂存区,用于临时存放代码改动,是一个文件,保存即将提交到文件列表信息
-
Repository:本地仓库,存放提交所有版本的数据,HEAD指向最新放入仓库的版本
-
Remote:远程仓库,托管代码的服务器,简单地认为你的项目组中的一台电脑用于远程数据交换(github,码云)
-
四部分的关系
git工作基本流程
-
在Workspace中添加修改文件
-
将需要版本管理的文件放入暂存区(git add .)
-
将暂存区的文件提交到git仓库(git commit)
-
若需要保存在远程仓库需要git push
流程如下图
git项目搭建
-
本地仓库搭建(创建全新的仓库)
git init
生成.git文件夹,版本等信息都在里面
-
远程仓库克隆
git clone [url] *# https://gitee.com/kuangstudy/openclass.git*
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 提交信息
忽略文件
有些时候我们不想把某些文件纳入版本控制中,比如数据库文件,临时文件,设计文件等
在主目录下建立".gitignore"文件,此文件有如下规则:
- 忽略文件中的空行或以井号(#)开始的行将会被忽略。
- 可以使用Linux通配符。例如:星号(*)代表任意多个字符,问号(?)代表一个字符,方括号([abc])代表可选字符范围,大括号({string1,string2,…})代表可选的字符串等。
- 如果名称的最前面有一个感叹号(!),表示例外规则,将不被忽略。
- 如果名称的最前面是一个路径分隔符(/),表示要忽略的文件在此目录下,而子目录中的文件不忽略。
- 如果名称的最后面是一个路径分隔符(/),表示要忽略的是此目录下该名称的子目录,而非文件(默认文件或目录都忽略)。
#为注释
*.txt #忽略所有 .txt结尾的文件,这样的话上传就不会被选中
!lib.txt #但lib.txt除外
/temp #仅忽略项目根目录下的TODO文件,不包括其它目录temp
build/ #忽略build/目录下的所有文件
doc/*.txt #会忽略 doc/notes.txt 但不包括 doc/server/arch.txt