Git学习

github/gitee的注册与公私密钥适配

git安装

ubuntu下:

sudo aptitude install git
sudo aptitude install git-doc git-svn git-email gitk

另外还可以在bash-completion中添加git的命令补齐功能:

  1. 需要下载git源码中的git-bash-completion.git
  2. 复制到 ~/.git-completion.sh下
  3. 修改 ~/.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 "[email protected]"


# 查看配置信息 
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学习_第1张图片

git基本的增删合并

git init

  • git init path / git init 设置仓库 ls -a 可以查看 .git文件。

git clone

请务必使用ssh的链接

  • git clone [email protected]:xxxxxxx changed_name # 直接更换 项目名称
  • git clone # repo 是git仓库 本地目录

git add

git add . # 将本地所有的文件都加入到缓存区
git add *.c 跟踪所有的.c文件
git status 用于查看项目的当前状态

git rm

git rm 从工作区和暂存区删除某文件

git rm -r * 递归删除当前目录中的所有子目录和文件

git mv

git mv #移动文件夹

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分支合并到当前分支中

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 # 查看历史提交记录

参考文章

Git从入门到项目实战,一篇文章吃透Git
Git技能树

你可能感兴趣的:(软件开发学习,git,学习)