学习目标:
- 学习分布式项目管理系统Git,为今后的项目实践打好基础
学习内容:
- 学习Git的安装与配置
- 学习Git的基础命令
- 搭建一个简单的C++项目
一、Git的安装与配置
Windows-x64版本下载地址:https:/git-scm.com/download/win
- Git安装
选择64-bit Git For Windows Setup.
下载完成后打开文件安装,安装完成后自动下载Git-Bash命令行工具
然后右键此电脑,选择属性,在高级系统设置中点击环境变量按钮,将Git所在的目录添加到Path环境变量下
打开Git-Bash 输入git -v
命令显示版本信息即安装成功
- Git配置
配置用户名和邮箱://配置用户名 git config --global user,name "Youe Username" //配置用户邮箱 git config --global user.email abcdef@ghij.klm //保存用户名和密码 git config --global credential.helper store //查看配置 git config --global --list
二、Git的使用
- 新建版本库 (Repository)
版本库为一个文件结构,该结构中所有文件、目录均被Git管理、跟踪,有需要时可以还原到之前的任意一个版本
- 本地创建仓库
cd targetDir //切换到目标目录下 git init [path]
创建完成后,当前目录下会出现一个名为".git"的目录,用于存放该仓库的信息,如果追加path参数则会在你追加的路径下生成.git文件。
- 远程克隆仓库
git clone [path] //必须追加要克隆的仓库的地址
-
工作区域和文件状态
- 文件区域
- 工作目录(Working Directory):电脑本地的目录
- 暂存区(Staging Area):临时存储区域,用于保存即将提交到Git的修改内容
- 本地仓库(Local Repository):你创建或克隆的仓库
- 文件状态
- 未跟踪(untrack):已创建但未被Git管理的文件
- 未修改(unmodified):被Git管理,但内容未发生变动的文件
- 已修改(modified):已修改,但未添加到暂存区的文件
- 已暂存(staged):已修改并添加到暂存区的文件
- 文件区域
-
添加和提交文件
查看文件状态git status //当前分支,有哪些文件及其文件状态 git add [file] //将文件添加到暂存区,等待后续操作,使用'.'参数将当前文件夹下所有文件添加到暂存区,使用*通配符匹配内容 git rm --cached [file] //将暂存区的内容取消暂存 git commit -m "提交信息" //将暂存区的内容添加到仓库中,并附上提交信息,无-m参数则打开vim供添加提交信息 git commit -am "提交信息" //暂存和提交 git log //查看提交记录,使用--online查看简洁的提交记录 git ls-files //查看暂存区内容 alias varname "git cimmand" //将git command重命名为varname
-
回退版本
git reset [--mixed] [版本id或HEAD指针] //--soft参数:回退到某一版本,保留工作区和暂存区的内容 //--hard参数:回退到某一版本,丢弃工作区和暂存区的内容 //--mixed参数:回退到某一版本,只保存工作区的内容,默认参数为--mixed
-
查看差异
git diff //无参数时,比较工作区和暂存区的内容 //参数为版本号时,比较工作区和版本库的差异 //参数--cached比较暂存区和版本库之间的差异 //参数为两个版本id时,比较两版本差异 git diff HEAD~ HEAD //比较当前版本和上一版本差异,HEAD~n为当前版本前n个版本 git diff HEAD~3 HEAD file.txt //比较当前版本和前三个版本file.txt的差异
-
删除文件
将工作区的文件删除后使用git add
命令提交到暂存区,或者使用git rm [file]
删除git rm [file] //从工作区和暂存区同时删除 git rm --cached [file] //仅从暂存区中删除 git rm -r* //递归删除某目录
-
.gitignore文件
- 应该忽略的文件
- 系统或软件自动生成的文件
- 编译产生的中间文件和结果文件
- 运行时生成的日志文件、缓存文件、临时文件
- 涉及身份、密码、口令、密钥等敏感信息的文件
创建.gitignore文件,将文件名或文件夹写入.gitignore文件中
.gitignore文件匹配规则:
- 空行和以#开头的行会被忽略
- 标准的Blob模式匹配:*通配符,?单个字符,[]列表中的单个字符
- **匹配任意中间目录
- [a-z]匹配字符a和字符z之间的所有字符
- !取反
- 应该忽略的文件
三、远程目录
-
SSH密钥配置
cd /jh/.ssh //切换到本地仓库的.ssh目录下 ssh-keygen -t rsa -b 4096 //-t指定协议 -b 4096指定大小为4096 //第一次配置会在用户根目录下的.ssh目录下生成id_rsa密钥文件 //再次配置时指定新密钥文件名称(如:test)并输入密码,如果没有指定,会覆盖之前的id_rsa文件,且不可逆
生成id_rsa文件(私钥文件)和id_rsa.pub(公钥文件)后,复制公钥文件的内容即可在GitHub上[settings] -> [SSH and GPG keys]粘贴
再次配置时需要创建config文件并添加以下内容# github Host github.com HostName github.com PrefferedAuthentications publickey IdentityFile ~/.ssh/test
-
推送和拉取
git push
将本地仓库的内容推送到远程仓库上
git pull
向远程仓库拉起请求 -
关联本地仓库和远程仓库
git remote add [shortname] [url] //将当前仓库和远程仓库对应 git remote -v //查看当前仓库对应的远程仓库 git branch -M main //指定分支名称为main git push -u origin main //将两个仓库的main分支连系起来 git pull [远程仓库名] [远程分支名]:[本地分支名] //拉取内容
四、分支
分支:代码库中的不同版本
git branch [分支名]
//创建不同分支
git checkout [分支名]
//切换到不同分支,也可以恢复文件到先前版本
git switch [分支名]
//专门用于切换分支
git merge [分支1]
//将分支1合并到当前分支
git log --graph --online --decorate --all
//查看分支图
git branch -d [分支名]
//如果分支已被合并,删除该分支
git branch -D [分支名]
//强制删除分支
git rebase [分支2]
//将当前分支接到分支2最新提交节点
一般不在公共分支上使用rebase
-
合并冲突
两个分支修改了同一文件的同一行代码,合并这两个分支时会产生冲突,需要手工编辑产生冲突的文件,然后提交git merge --abort //中止合并
(未完待续)