把以前学习Git的笔记贴下。
直接快照,不是比较差异
git 保存的是快照,提交的是一个快照。Snapshot
Git 只关心文件数据的整体是否发生变化。
Git操作大多数仅仅是把数据添加到数据库。一旦提交快照之后就完全不用担心丢失数据。
Git的三种状态:已提交(committed).已修改(modified).已暂存(staged)
已提交表示该文件已经被安全地保存到本地数据库中。
已修改表示修改了某个文件,但是还没提交保存
已暂存表示把已修改的文件放在下次提交时要保存的清单中。
yum/apt-get install curl-devel expat-devel gettext-devel openssl-devel zlib-level
取得项目的Git仓库
1.在现存的目录下,导入所有文件来创建新的Git仓库。
git init(要对现有的某个项目开始用Git管理)
如果当前目录下有几个文件想要纳入版本控制,需要用git add 告诉Git开始对这些文件进行跟踪。
git add *.c
git commit -m 'initial project version'
2.从已有的Git仓库克隆出一个新的镜像仓库。
git clone 不是checkout
git clone URL 自定义目录名称
git status可以查看当前文件状态
跟踪新文件
git add README
git status
暂存更新 git add
加一个要忽略的文件模式, .gitignore
git diff 查看修改过的地方(比较的工作目录中当前文件和暂存区域快照之间的差异,也就是修改之后还没有暂存起来的变化内容)
git diff --cached 查看已经暂存起来的文件和上次提交时的快照之间的差异。
git commit -m "Story 182: Fix benchmarks for speed"
-m 参数后跟提交说明的方式。
remove文件
从暂存区域移除
rm grit.gemspec
git status
changed but not updated
git rm grit.gemspec
git status
changes to be committed
从Git 仓库中移除 但仍然保留在当前工作目录中。仅从跟踪清单中删除。
git rm --cached readme.txt
移动文件
git mv file_from file_to 相当于以下3条命令
mv README.txt README
git rm README.txt
git add README
查看提交历史
git log
-p 显示每次提交的内容差异, -2仅显示最近的2次更新 --stat 仅显示简要的增改行数统计
--pretty=oneline
奖每个提交放在一行显示。在提交数很大时非常有用
git log --pretty=format:"%h-%an,%ar:%s"
%H 提交对象(commit)的完整哈希字串
%h 提交对象的简短哈希字串
%T 树对象(tree)的完整哈希字串
%t 树对象的简短哈希字串
%P 父对象(parent)的完整哈希字串
%p 父对象的简短哈希字串
%an 作者(author)的名字
%ae 作者的电子邮件地址
%ad 作者修订日期(可以用-date= 选项定制格式)
%ar 作者修订日期,按多久以前的方式显示
%cn 提交者(committer)的名字
%ce 提交者的电子邮件地址
%cd 提交日期
%cr 提交日期,按多久以前的方式显示
%s 提交说明
限制输出长度
git log --since=2.weeks
-(n) 仅显示最近的n 条提交
--since, --after 仅显示指定时间之后的提交。
--until, --before 仅显示指定时间之前的提交。
--author 仅显示指定作者相关的提交。
--committer 仅显示指定提交者相关的提交
查看Git 库中2008年10月期间,gitster提交的但未合并的测试脚本。
git log --pretty="%h:%s" --author=gitster --since="2008-10-01" --before="2008-11-01" --no-merges --t/
撤销操作。
修改最后一次提交
git commit --amend
git commit -m "initial commit"
git add forgotten_file
git commit --amend
上面的三条命令最终得到一个提交,第二个提交命令修正了第一个的提交内容。
取消已经暂存的文件
git add .
git status
git reset HEAD benchmarks.rb
取消对文件的修改
查看当前的远程库
git remote
git remote add pb git://github.com/paulboone/ticgit.git
git remote -v
git fetch pb
推送数据到远程仓库
git put remote-name branch-name
如果要把本地的master分支推送到origin服务器,
git push origin master
查看远程仓库信息
git remote show remote-name
远程仓库的删除和重命名
git remote rename pb paul
git remote
打标签
1.列显已有的标签git tag
2. 新建标签 Git使用的标签有2种轻量级lightweight和含附注的annotated
轻量级的是个不会变化的分支,实际上他是一个指向特定提交对象的引用。
含附注标签实际上是存储咋仓库中的一个独立对象,它有自身的校验和信息。
创建一个含附注的标签 -a
git tag -a v1.4 -M "MY VERSION 1.4"
签署标签
git tag -s v1.5 -m “my signed 1.5 tag"
git show v1.5
创建一个轻量级标签
git show v1.4-1w
验证标签
git tag -v tag-name
后期加注
git tag -a v1.2 9fce02
分享标签
默认情况下,git push并不会把标签传送到 远端服务器
只有通过显示命令才能分享标签到远端仓库。
git push origin v1.5
如果要一次推送所有本地新增的标签上去 可以使用--tags选项
使用别名
git config --global alias.last 'log -l HEAD'
git last
git unstage fileA/git reset HEAD fileA
Git 内部原理
content-addressable内容寻址
git update-ref refs/tags/****************
git tag -a v1.1 ********************** --m 'test tag'
git remote add origin ***@github.com:**********************
git 仓库中有5个对象: 3个表示文件快照内容的blob对象,一个记录这目录树内容及其哥哥文件对应blob对象索引的tree对象
一个包含指向tree对象目录的索引和其他提交信息元数据的commit对象。
Git中的分支,其实本质上仅仅是个指向commit对象的可变指针。
创建一个新的分支
git branch testing
它保存这一个名为HEAD的特别指针。 它是一个指向正在工作中的本地分支的指针。 git branch 只是建立了一个新的分支,但是不会自动切换到这个分支中去。
使用git checkout testing
切换到其他分支。
git checkout -b iss53
等同于
git branch iss53
git checkout iss53
合并到master分支并发布到生产服务器
-d 表示删除
git branch --merged
查看那些分支已被并入当前分支
git branch --no-merged
查看那些分支没有并入当前分支
跟踪分支
git checkout --track origin
删除远程分支
git push origin :serverfix
把一个分支合并到另一个分支中用merge和rebase
Git 传输协议
本地协议,SSH ,HTTP GIT协议
本地协议就是硬盘上的另一个目录
git clone /opt/git/project.git 或 git clone file:///opt/git/project.git
如果明确以file://开头,那么Git会以一种略微不同的方式运行。
添加一个本地仓库到现有的Git工程
git remote add local_proj /opt/git/project.git
通过SSH克隆一个Git仓库
git clone ssh://user@server:project.git
在不知名某个协议这个时候Git会默认使用SSH,所有数据传输都是加密和授权的。
git clone user@server:project.git
Git协议 特定的端口9418,无需任何授权。
Git协议是现存最快的传输协议。
缺点是缺少授权机制。
HTTP/S协议 架设的简便性
git clone = git init /git fetch
在服务器部署Git
把现存的仓储到处为新的纯仓库。不包含当前工作目录的仓库。
GitWeb
启用git instaweb
git instaweb --httpd=webrick
关闭服务
git instaweb --httpd=webrick --stop
通过制定 GITWEB_PROJECTROOT变量告诉编译命令Git仓库的位置。
make GITWEB_PROJECTROOT="/opt/git" \
prefix=/usr gitweb/gitweb.cgi
git clone --bare my_project my_project.git
Git协议的设定很简单。只要以长期首付进程的形式运行该命令;
git daemon --reuseaddr --base-path=/opt/git /opt/git
--reuseaddr 使得服务无须等到旧的链接尝试过期以后再重启, --base-path选项时的克隆项目的时候不用给出完整的路径。
最后的路径告诉git进程到处仓库的位置。
/etc/event.d/local-git-deamon
如果不重启就开启git,可以运行下面的命令:
initctl start local-git-deamon
Gitosis需要使用部分Python工具,所以先要安装Python的setuptools包。
apt-get install python-setuptools
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAqlPn87TU6KIBGB2kEOkc1QOGSIE3MI7DoAXB5DOm+AgLmK1dBwmuMgwDFIzgZ2585Bz9qupH84rImm4lsWpiF0AKY89YHD3Oll/GfZ6Ub9SujZzaEFWXFIRo9Et2ceK3Z3sADadTZyvP7ped+OvYC6QXTaVmjDaLcylNicxHjWvmv1c9KXWpm+S+48uabzfpPzE6sSSUQ5Z+9nf2qNcM/I/kNLQ+2ABX13mL9k5qPfWfDSlcyHr64qn3qfPWyA3doS+92p096j2b4DlswWTHbjB8g4oqBPm7kLHAiP/gSVLyOmYdaISzutjdVtProDQZWo3lKIYsyPlaTiYfXZ0rXQ== abc@corp.com
git branch -d hotfix
git merge hotfix
f4:49:04:b6:0b:d1:af:dd:6e:5e:62:71:e6:8a:10:89 hongqiang.wen@opi-corp.com
阅读(1045) | 评论(0) | 转发(0) |