1.理解分布式版本控制系统
- 形象理解:每个⼈的电脑上都是⼀个完整的版本库
- 这样⼯作的时候,就不需要联⽹了, 因为版本库就在⾃⼰的电脑上
- 既然每个⼈电脑上都有⼀个完整的版本库,那多个⼈如何协作呢?
- 例如:在⾃⼰电脑上改了⽂件A,同事也在他的电脑上改了⽂件A,这时,两个人之间只需把各⾃的修改推送给对⽅,就可以互相看到对⽅的修改了
- 分布式版本控制系统的安全性要⾼很多,因为每个⼈电脑⾥都有完整的版本库,某⼀个⼈的电脑坏掉了不要紧,随便从其他⼈那⾥复制⼀份就可以了
- 在实际使⽤分布式版本控制系统的时候,其实很少在两⼈之间的电脑上推送版本库的修改
- 因为可能俩人不在⼀个局域⽹内,两台电脑互相访问不了,也可能今天同事病了,他的电脑压根没有开机
- 因此,分布式版本控制系统通常也有⼀台充当“中央服务器”的电脑
- 但这个服务器的作⽤仅仅是⽤来⽅便“交换”⼤家的修改,没有它⼤家也⼀样⼲活,只是交换修改不⽅便⽽已
- 有了这个“中央服务器”的电脑,这样就不怕本地出现什么故障了
2.克隆远程仓库
- 克隆/下载远端仓库到本地:
git clone repositry_uri
- SSH协议和HTTPS协议是Git最常使用的两种数据传输协议
- SSH协议使⽤了公钥加密和公钥登陆机制,体现了其实⽤性和安全性
- 使⽤此协议需要将自己的公钥放上服务器,由Git服务器进⾏管理
- 使⽤HTTPS⽅式时,没有要求,可以直接克隆下来
- SSH协议使⽤了公钥加密和公钥登陆机制,体现了其实⽤性和安全性
- 如何使用SSH方式克隆仓库呢?
- 前置检查:在⽤⼾主⽬录下,看看有没有
.ssh
⽬录- 如果有,再看看这个⽬录下有没有
id_rsa
和id_rsa.pub
这两个⽂件- 如果已经有了,可直接跳到下⼀步
- 如果没有,需要创建SSHKey
- 如果没有需要先手动创建出该目录
mkdir ~/.ssh
- 如果有,再看看这个⽬录下有没有
- 创建SSH KEY:
ssh-keygen -t rsa -C "email"
,配置一路默认即可- 创建完成后,可以在用户主目录里的
.ssh
文件夹内找到id_rsa
和id_rsa.pub
,这两个就是SSH KEY的密钥对 id_rsa
是私钥,不能泄露出去id_rsa.pub
是公钥,可以放心地告诉任何人
- 创建完成后,可以在用户主目录里的
- 添加公钥至远端仓库:
cat id_rsa.pub
获取公钥内容,原封不动复制到远端仓库的SSH公钥部分即可 - 至此,已经可以成功在本地用SSH方式克隆仓库了
- 前置检查:在⽤⼾主⽬录下,看看有没有
- 注意:SSH协议每次推送是不用输入密码的,但如果是HTTPS协议,每次推送都必须输入密码
- 从远程仓库克隆后,实际上Git会⾃动把本地的
master
分⽀和远程的master
分⽀对应起来- 远程仓库的默认名称是
origin
,本地可以使⽤git remote
命令,来查看远程库的信息 git remove -v
可以显示更详细的信息
- 远程仓库的默认名称是
3.向远程仓库推送
- 前提:在本地仓库配置了和远端仓库一样的用户名和邮箱
- 将本地仓库的内容推送至远端仓库:
git push
- 详细命令格式:
git push <远程主机名> <本地分支名>:<远程分支名>
- 如果本地分支名与远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>
4.拉取远程仓库
- 如果远程仓库是要领先于本地仓库⼀个版本,为了使本地仓库保持最新的版本,需要拉取下远端代码,并合并到本地
- 从远程获取代码并合并本地的版本:
git pull
- 详细命令格式:
git pull <远程主机名> <远程分支名>:<本地分支名>
- 如果远程分支名与本地分支名相同,则可以省略冒号:
git push <远程主机名> <远程分支名>
5.配置 Git
1.忽略特殊文件
- 在⽇常开发中,有些⽂件不想或者不应该提交到远端,那如何让Git知道该忽略哪些文件呢?
- 在Git⼯作区的根⽬录下创建⼀个特殊的
.gitignore
文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件了
- 在Git⼯作区的根⽬录下创建⼀个特殊的
- 如果已经忽略了某个类型的文件,但是又想追踪管理某个特定的该类型文件,该怎么办?
- 方法一:使用
git add -f file_name
强制添加 - 方法二:在
.gitignore
中添加配置!file_name
即可让Git不忽略该文件
- 方法一:使用
- 如果觉得
.gitignore
有问题,想知道哪个规则写错了,该怎么办?- 可以使用
git check-ignore -v file_name
来检查相关配置
- 可以使用
- 配置示例:
# 忽略特定文件格式 *.so *.ini # 忽略特定文件 SnowK.sh # 不忽略特定文件 !Die.so
2.给命令配置别名
- Git支持对命令进行简化:
git config [--global] alias.<别名> <被别名替换的命令>
- 被别名替换的命令中,如果含有空格,可以使用双引号(
""
)括起来 --global
参数为全局参数,即设置后在任意一个仓库都可使用设置的别名- 如果不添加
--global
参数,只能在该仓库内使用设置的别名
- 如果不添加
- 被别名替换的命令中,如果含有空格,可以使用双引号(
- 示例:
$ git config --global alias.st status $ git st On branch main Your branch is up to date with 'origin/main'. nothing to commit, working tree clean $ git config --global alias.lpa "log --pretty=oneline --abbrev-commit" $ git lpa 33d983d (HEAD -> main, origin/main) Done gitignore 8c28641 test .gitignore b0f37ed Update from Github 6570136 First Commit