1.4.2 分布式版本控制 git
-
关于
git的认识-
git clone:Clone下来的文件夹自带.git隐藏目录,天生就是Git仓库。 -
Fork: 这是GitHub网页上的操作,不是Git命令。-
它的作用是:“复制一份别人的仓库到我自己的账号下”。
-
为什么需要
Fork? 如果你想给Ceph官方贡献代码,你直接Clone官方仓库是推不回去的(没权限)。所以你要先Fork一份到自己名下(比如xqy2003/ceph),然后Clone这个自己的仓库,改完推回自己的仓库,最后在网页上提"Pull Request"。
-
-
把普通文件夹变成
Git仓库cd my-project # 1. 初始化 git init # 此时文件夹里多了一个 .git 隐藏目录 # 2. 纳入管理 git add . git commit -m "First commit" -
绑定身份
-
是一次性的吗?
-
如果你加了
--global参数:是的。这台电脑上以后所有的Git操作都用这个身份。 -
如果不加:只对当前仓库生效。
-
-
例子
git config --global user.name "xqy2003" git config --global user.email "xqy2003@example.com" -
注意:这只是“签名”,不是“登录”。
Git push时让你输密码/Token才是验证权限。-
user.name不必和GitHub用户名一样吗 -
但
user.email很重要:如果你配置的邮箱和你GitHub账号绑定的邮箱一致,GitHub才会把这次提交算作你的贡献(绿格子),头像也会显示对。
-
-
-
创建分支
-
创建并切换到新分支:
# 基于当前分支,创建一个叫 feature-A 的新分支,并跳过去 git checkout -b feature-A -
在分支上再生分支(孙子):
# 假设你现在已经在 feature-A 上了 git checkout -b feature-B # 现在 feature-B 就是基于 feature-A 的代码创建的 -
跳转到已有分支
git checkout 分支名 # 例如: git checkout my-dev-
如果你在当前分支修改了文件但没提交
(Dirty Workspace),Git可能会拒绝切换,怕覆盖了你的改动。 -
最稳妥的做法:永远保持
git status是干净的再去切换分支。
-
-
-
git push-
完整语法 :
git push <远程仓库名> <本地分支名>:<远程分支名> -
当你偷懒写成
git push origin my-experiment时,Git默认理解为:git push origin my-experiment:my-experiment(把本地的A推送到远程的A)。 -
如果没有远程分支会怎样?: 如果
GitHub上本来没有my-experiment这个分支,Git会直接在那边新建一个同名分支,然后把代码传上去。 -
origin只是一个代号, 它代表了那串很长的URL (https://github.com/.../....git)。 -
你可以用
git remote -v看看origin到底指向哪里。
-
-
远程仓库的管理
-
查看
git remote -v-
内容举例
origin https://github.com/ceph/ceph.git (fetch) origin https://github.com/ceph/ceph.git (push) my_repo https://github.com/xqy2003/ceph-hrac.git (fetch) my_repo https://github.com/xqy2003/ceph-hrac.git (push) -
这里说明你关联了两个远程仓库,分别起了昵称叫 origin 和 my_repo。
-
-
关联一个新的远程仓库
# 语法: git remote add <给它起个名> <URL> git remote add my_backup https://github.com/xqy2003/backup.git
-
-
分支名
-
在同一个仓库内:是的,必须唯一。(你不能在本地有两个叫
dev的分支)。 -
在本地和远程之间:不是!完全不需要一致!
-
最常用的(同名推送):
git push origin devGit看到你没写冒号,它会默认帮补全为:git push origin dev:dev。
-
改名推送
-
假设你在本地叫
my-dev-v2,但你希望推送到服务器上显示为release-1.0。git push origin my-dev-v2:release-1.0
-
-
-
-
基础三板斧
- 有个很重要的观点:
git add,git commit都是争对当前分支的。

- 有个很重要的观点:
-
-
github连接案例-
尝试用
HTTPS方式克隆一个私有仓库,结果失败。git clone https://github.com/charicity/ceph-compress/tree/astl-lj.git-
HTTPS协议:git clone https://...这种方式需要账号密码(或Token)认证。如果本地没有缓存正确的Token,或者Token过期,GitHub会拒绝访问。 -
GitHub的安全策略:对于私有仓库的无权访问,GitHub统一报404 Not Found(找不到),而不是403 Forbidden(禁止访问),目的是防止黑客探测私有仓库是否存在。 -
URL错误:git clone后面必须接仓库的根地址(以.git结尾),不能接分支路径(如/tree/astl-lj)。要下载特定分支,得先clone整个仓库,再checkout。
-
-
生成
SSH密钥-
既然
HTTPS走不通,我们切换到SSH协议。首先需要一把钥匙。ssh-keygen -t ed25519-
ssh-keygen:生成SSH密钥对的工具。 -
-t ed25519:指定加密算法。ed25519是目前最安全、最高效的新一代算法(比老的rsa更好)。 -
生成结果:在
~/.ssh/目录下生成了两个文件:-
私钥 (
id_ed25519):你自己留着,绝对不能给别人看。 -
公钥 (
id_ed25519.pub):你需要给GitHub的“锁”。
-
-
-
-
上传公钥
你把公钥内容复制到了
GitHub网页设置里。cat ~/.ssh/id_ed25519.pub帮内容放入网页里面

-
首次连接验证 (握手与信任)
ssh -T git@github.com-
ssh:Secure Shell客户端。 -
-T:告诉SSH“不要分配伪终端”。因为GitHub不允许我们登录进去敲命令,所以必须加这个参数,否则可能会卡住或者报错。 -
git@github.com:以git用户身份连接github.com主机。 -
你的操作输入
yes
-
-
ssh建立连接后,注意点- 要
Clone整个仓库,不要在URL后面加/tree/...那一段,那是分支路径,不是仓库地址。clone下来后用git checkout astl-lj切换分支即可
git clone git@github.com:charicity/ceph-compress.git - 要
-
-
假设要连接两个
github账号 && 疑问- 如何让本机
PC连接两个github账号



- 疑问



- 如何让本机
-
理解
git的历史追踪功能-
归功于
commit, 而不是分支,分支相当于git树上一个标签的作用。 -
你想,其实不同版本的迭代,他就是线性的一条链,分支的出现让它变成树结构(把一条链分成多条链)。










-

浙公网安备 33010602011771号