Chinaunix首页 | 论坛 | 博客
  • 博客访问: 461009
  • 博文数量: 108
  • 博客积分: 25
  • 博客等级: 民兵
  • 技术积分: 1134
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-29 19:43
文章分类

全部博文(108)

文章存档

2016年(10)

2015年(9)

2014年(73)

2013年(16)

我的朋友

分类: 信息化

2015-02-10 13:31:57

把以前学习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
阅读(967) | 评论(0) | 转发(0) |
0

上一篇:Ubuntu 14.04升级ansible

下一篇:linux systemtap

给主人留下些什么吧!~~