github/gitee的注册与公私密钥适配
git安装
ubuntu下:
sudo aptitude install git
sudo aptitude install git-doc git-svn git-email gitk
另外还可以在bash-completion中添加git的命令补齐功能:
- 需要下载git源码中的git-bash-completion.git
- 复制到 ~/.git-completion.sh下
- 修改 ~/.bashrc
git clone https://github.com/markgandolfo/git-bash-completion.git
cp .git-bash-completion/git-completion.bash ~/.git-completion.bash
# ~/.bashrc中添加内容:
if [ -f ~/.git-completion.bash ]; then
. ~/.git-completion.bash
fi
git设置
# 配置用户信息
git config --global user.name "XiaoMing"
git config --global user.email "XiaoMIng@gmail.com"
# 查看配置信息
git config --list
# 查看用户信息
git config --global --list
git config --system --list
设置密钥
ls ~/.ssh # 查看是否有密钥 rsa, rsa.pub
# 如果没有,请执行:
ssh-keygen -t rsa -C "email"
cd ~/.ssh
cat id_rsa.pub # 获取公钥
将公钥提交到github ssh-key中
git 分布式管理
版本控制是记录若干内容的变化,完成对历史的查看,备份和恢复之前的版本,保证多人的协作。
- 版本控制的起源: diff 与 patch
diff 查看文件/内容的差异,生成diff文件
patch可以根据diff文件和某一版本,生成另外一个版本的文件 - RCS(revision control system): 本只适合本地版本控制
采用diff和patch实现文件的管理。 - CVS,SVN 集中式版本控制
CVS 不支持原子性提交。 所有的文件都在一个中心电脑中,不同的人员可以向服务器提交不同的代码,但没有不同代码之间的管理。 (类似 多线程没有数据上锁)
SVN 改进了 CVS,能进行原子提交,但是需要客户端与服务端的协同交互,协同工作难以进行。因为集中式只能排队提交,不同同时修改,而且提交没有代码门禁。
原子性: 是一个系统中最小的单元。
- git 分布式版本控制
将项目中的文件制作快照,并保存快照的索引。 没有改变的文件不进行存储,只生成对应文件的链接。 - 强健性的原因
集中式存储不同版本之间的变化,如果一个版本出问题,后续版本都出问题; 而分布式 数据安全。
集中式只有一个点有数据库,所有都是与服务器交互,对于带宽要求比较高,存在单点故障隐患;分布式离线操作。
集中式不适合多人开发。
git基本框架
git基本的增删合并
git init
git init path
/git init
设置仓库ls -a
可以查看 .git文件。
git clone
请务必使用ssh的链接
git clone git@github.com:xxxxxxx changed_name
# 直接更换 项目名称git clone <repo>
# repo 是git仓库 本地目录
git add
git add .
# 将本地所有的文件都加入到缓存区
git add *.c
跟踪所有的.c文件
git status
用于查看项目的当前状态
git rm
git rm <file>
从工作区和暂存区删除某文件
git rm -r *
递归删除当前目录中的所有子目录和文件
git mv
git mv <src> <des>
#移动文件夹
git commit
git commit -m "first version" # -m 表示添加message
git commit -am # 可以避免添加到缓存
git push
git push
git push <远程主机名> <本地分支名>:<远程分支名>
# 如果本地分支名与远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>
git push -u <远程主机名> <本地分支名> # 如果远程主机没有本地分支,那么会自动创建
git push origin --delete master #会删除 远程origin主机的master分支
git分支管理
git branch # 查看本地分支
git branch -r # 查看远程分支
git branch <new_branch_name> # 生成新的branch,但是目前还在当前分支
git checkout <branch> # 切换到其他分支
git checkout -b <new_branch_name> # 创建并切换到其他分支
git branch -d <other_branch> # 删除其他分支,不能是当前分支 # 当分支没有被合并时会被提醒
git branch -vv # 查看 本地和远程分支之间的关系
git分支合并
git merge <branch_name>
# 将branch_name分支合并到当前分支中
git pull 更新
git pull <远端名称> <远程分支名>:<本地分支名>
git pull <远端名称> <远程分支名> # 默认为当前分支
git fetch <远端名称> <远程分支名> # 只将远端仓库的分支拉到本地仓库,但未合并
会将git远端的最新代码库拉下来,为了将别人在远端更新的代码库加载下来
git pull实际上是 git fetch + git merge
绑定远程仓库
当我们使用git init时,我们没有链接到github/gitee等的代码库上;另外我们有时还需要链接多个远程仓库,这个时候就需要用到remote指令了。
git remote add <远端名称><仓库路径>
git remote # 查看当前已有的远程仓库
git remote remove <远端名称> # 删除某个远端仓库
小功能
git status -s
# 查看当前状态git diff
# 查看寄存区和工作区差异git log
# 查看历史提交记录