- 内部原理
- 实例
- git命令
内部原理
当git init 时,Git 会创建一个 .git 目录。 这个目录包含了几乎所有 Git 存储和操作的对象
git 目录.pngdescription
文件仅供 GitWeb 程序使用,我们无需关心;config
文件包含项目特有的配置选项;info
目录包含一个全局性排除(global exclude)文件,用以放置那些不希望被记录在 .gitignore 文件中的忽略模式(ignored patterns);hooks
目录包含客户端或服务端的钩子脚本(hook scripts),
核心组成部分:HEAD
文件、index
文件、objects
目录、refs
目录。
objects
目录存储所有数据内容;
refs
目录存储指向数据(分支)的提交对象的指针;
HEAD
文件指示目前被检出的分支;
index
文件保存暂存区信息。
- 当执行提交操作(git commit)时,暂存区的目录树写到版本库(对象库)中,master 分支会做相应的更新。即 master 指向的目录树就是提交时暂存区的目录树。
- 当执行 "git reset HEAD" 命令时,暂存区的目录树会被重写,被 master 分支指向的目录树所替换,但是工作区不受影响。
- 当执行 "git rm --cached <file>" 命令时,会直接从暂存区删除文件,工作区则不做出改变。
- 当执行 "git checkout ." 或者 "git checkout -- <file>" 命令时,会用暂存区全部或指定的文件替换工作区的文件。这个操作很危险,会清除工作区中未添加到暂存区的改动。
实例
需求一:我们需要在本地创建一个代码仓库,然后还需要一个远程的代码仓库,然后把两者链接起来,给代码打上一个 tag, 然后删掉
注意:这里 git 的安装配置就省略了
方案一:(从远程仓库直接克隆岛本地然后打 tag)
//1.在本地通过终端打开一个目录:
cd /Users/shijianmei/Documents/github/gittest
//2.在 github 上创建一个远程仓库,并 clone 到本地
git clone git@github.com:shijianmei/gittest.git
//3.在本地添加两个文件并提交到服务器端
git touch Person.h Person.m
git add .
git commit -m '添加了 person 类'
git push
//4.添加版本号并推送到远程仓库
git tag '0.0.1'
git push --tags
//5.删除版本号并同步到远程仓库
git tag --delete 0.0.1
git push origin :0.0.1
方案二:(本地初始化一个代码仓库,和远程仓库进行链接,再打 tag)
//1.在本地通过终端打开一个目录:
cd /Users/shijianmei/Documents/github/gittest
//2.在 github 上创建一个远程仓库,并在本地设置
https://github.com/shijianmei/gittest.git(可以通过 github 或者其它)
//3.本地git 库初始化及关联远程仓库并
git init
//4设置关联到已创建好的远程仓库地址
git remote add origin https://github.com/shijianmei/gittest.git
//5.拉取远程仓库的文件到本地
git pull origin master
//6.在本地添加两个文件并提交到服务器端
git touch Person.h Person.m
git add .
git commit -m '添加了 person 类'
//7.推送到远程仓库(这里需要添加上具体分支)
git push origin master
//8.添加版本号并推送到远程仓库
git tag '0.0.1'
git push --tags
//9.删除版本号并同步到远程仓库
git tag --delete 0.0.1
git push origin :0.0.1
注意:在方案二遇到问题:refusing to merge unrelated histories
git pull --rebase origin master
git push -u origin master即可完成代码上传到github
git 命令简化
git 添加别名的方式,打开~/.gitconfig文件在其末尾添加:
在命令行输入以下命令:
1、进到根目录
cd ~/
2、打开.gitconfig,
vi ~/.gitconfig
a = add
b = branch
c = commit
d = diff
l = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset | %C(bold)%an' --abbrev-commit --date=relative
r = reset
aa = add .
ba = branch -a
ca = commit -a
cc = commit -a -m
cl = clone
cm = commit -m
co = checkout
cp = cherry-pick
nb = checkout -b
pl = pull
ps = push origin master
st = status
git st 和 git status 等同效果
3、修改完后保存退出就可以了
参考:
https://git-scm.com/book/zh/v1
https://github.com/git/git
http://www.runoob.com/git/git-tutorial.html
网友评论