git版本管理笔记整理

题记:linux之父Linus 最大的发明便是创造了git-分布式版本管理工具 。

最近在搭建git服务器,于是梳理I了下git笔记。

-------

FYI

-----------------------


1.Git安装
sudo apt-get install -y git-core
配置 Git
以下命令为配置 Git 相关信息。 一般不建议使用--global
git config --global user.name  "wule"
git config --global user.email wule320@163.com
git config --global color.ui   true # 使用git默认的配色方案,推荐
git config --global --list # 查看配置信息
git config --global color.diff true  #显示diff时色彩亮
git config --global alias.co checkout # 取个别名

2.Git常用操作
git add *.c  把所有的c文件放入暂存区 
git add Makefile.mk把名为Makefile.mk的文件放入暂存区 
git add android4.0/  把名为android4.0的目录里的所有文件放入暂存区 
git add *  把当前目录的所有文件都放入暂存区 
git rm --cached android4.0/  -r  //把名为android4.0的目录里的所有文件取消暂存 
git rm --cached readme.txt  //把名为readme.txt的文件取消暂存 
git commit -m '初始化版本库'  //提交代码到本地仓库
git diff --staged  # 已经暂存起来的文件和上次提交时的快照之间的差异 也可以用 git diff --cached
git diff # 直接使用此命令是 工作目录中当前文件和暂存区域快照之间的差异
git rm --cached file//文件从 Git 仓库中删除(亦即从暂存区域移除),仍保留在当前工作目录
git rm file //移除文件,强制删除选项 -f
git mv test.txt test1.txt//在 Git中对文件改名
git log --author=xx -p  //查看xx的提交历史,并显示每一次修改的diff
git commit --amend -m 'first too'//撤消操作重新提交
git whatchanged //列出项目开发中的修改历史
git clone 远程代码  //克隆代码 
git checkout -b branch_name   //创建分支
git add file//添加代码到分支的暂存区
git show commit //查看一个commit
git commit -m "本次提交的注释" //提交代码到分支 
git checkout master//切换到主版 
git pull origin master //获取远程最新代码 
git merge branch_name //合并某分支到master分支
git pull origin master  //获取远程最新代码
git push origin master  //推送master分支 
git branch -d branch_name //没有问题了删除本地分支
git rm --cached dir/ -r  //把名为dir的目录里的所有文件取消暂存
git init //初始化空仓库=git init-db
git commit -m "[manage20120518]完成XX的添加、修改功能"
git fetch master //确认已经获取了最新的主分支
git branch experimental//建立管理分支
git branch //列出git所有存在的分支
git checkout experimental  切换到制定分支
git merge experimental  合并分支
git branch -d experimental  删除分支在分支已经合并到主干上后
git branch -D experimental  删除分支无论如何
type *.txt //show the txt
git status  //查看当前状态
补充对于任何一个文件,在 Git 内都只有三种状态 ,
已提交  committed  已提交表示该文件已经被安全地保存在本地数据库中了 
已修改  modified  已修改表示修改了某个文件,但还没有提交保存 
已暂存  staged  已暂存表示把已修改的文件放在下次提交时要保存的清单中 

3.Git 使用规范
使用Git过程中,必须通过创建分支进行开发,坚决禁止在主干分支上直接开发。review的同事有责任检查其他同事是否遵循分支规范。
在Git中,默认是不会提交空目录到版本库中,需要在该目录下新建一个 .gitignore 的空白文件提交
代码回溯:不属于自己修改的代码被覆盖的情况
1.把外部文件纳入到自己的 Git 分支来的时候先比对,确认所有修改都是自己修改的。
2.多人协作时,不要各自在自己的 Git 分支开发,然后发文件合并。正确的方法应该是开一个远程分支,然后一起在远程分支里协作。不然,容易出现代码回溯
3.提交代码一定要 git diff 看提交的东西是不是都是自己修改的。如果有不是自己修改的内容,很可能就是代码回溯
4.review 代码的时候如果看到有被删除掉的代码,一定要确实是否是写代码的同事自己删除的。如果不是,很可能就是代码回溯


4.git原理
cd android4.0/
git init  //初始化当前所在目录的这个项目
ls -a
git add .  //git给目前的这个项目制作一个快照snapshot,git管快照叫做索引index)。快照一般会暂时存储在一个临时存储区域中
git commit //将快照里登记的内容永久写入git仓库中,也就是开发者已经想好了要提交自己的开发成果了
git diff //修改后和修改前的不同之处
git add  *.txt //已经修改或增加了 *.txt文件,git去检查一下
如果修改了项目代码,先git add你修改过的文件,再git diff并git status查看确认,然后git commit提交,然后输入你的开发日志,最后git log再次确认。

git commit -a,//直接提交所有修改 = git add git commit

git log -p //给出开发日志,而且显示每个开发版本的代码区别

working directory  工作区
git add *
staging area/ index  
git commit
repository  仓库

git commit -m “this is frist commit”
git checkout -f HEAD //从.git中找到删除的文件


git objests 对象,创建,不能改变
三种类型的object
blob 存储数据的文件 叶子
tree  类似目录指向目录或文件 树
commit 指向树
tag 指向commit 通过标签能找到commit对应的tree

ls -l .git/objects/
 40字节 =2字节用于目录 +38字节 便于查找
 git cat-file -t 哈希值 //查看文件的类型
 
 git ls-tree  哈希值 //查看树的包含内容
 git show -s --pretty=raw  哈希值 查看commit的内容
 
 branh
 |
 commit
 |
 tree
 |
 blob
 
 
 References 引用 ,可改变
 Braches
 HEAD
 Remote Braches
 
 git object Model
 
     HEAD //指向当前工作分支
     |     
     branch
      |    
remote ->commit< -  tag
     |
     tree
      |
     blob
 

git tag v1.0  //轻量级创建tag
git tag -a milestone1.0 -m "this is the first stable version"  //重量级创建TAG。对象


变更代码提交代码时打上标签,便于恢复,checkout

 提取标签 并打包
git archive --format=tar --prefix=ruby/ v1.0 | gzip > /tmp/ruby1.0.tar.gz
    归档     打成tar格式          项目    tag     压缩   路径


分支 -主线

git init
git add .
gitcommit -m "frist commit"

find
git branch
git commit -a -m "second commit"
git branch testing  当前对象创建分支 testing
git  checkout testing 切换到指定的分支

master始终指向最近创建的commit
HEAD始终指向当前分支,TAGs不会变化

合并
git branch 列出所有分支,查看当前所在分支 *
git checkout master 切换到目的分支
git merge testing 然后将指定的其他分支testing合并到目的分支master下
commit 可以有多个父对象,在合并情况下,一般为一个父对象。
git branch -D testing  删除分支

three-way merge

git 目录    
它是 Git 用来保存元数据和对象数据库的地方。每次克隆镜像仓库的时候,实际拷贝的就是这个目录里面的数据。

工作目录    
从项目中取出某个版本的所有文件和目录,用以开始后续工作的叫做工作目录。这些文件实际上都是从 git 目录中的压缩对象数据库中提取出来的,接下来就可以在工作目录中对这些文件进行编辑

暂存区域    
所谓的暂存区域只不过是个简单的文件,一般都放在 git 目录中。有时候人们会把这个文件叫做索引文件,不过标准说法还是叫暂存区域。

基本的 Git 工作流程
1、在工作目录中修改某些文件。
2、对这些修改了的文件作快照,并保存到暂存区域。
3、提交更新,将保存在暂存区域的文件快照转储到 git 目录中。

已跟踪
已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新,已修改或者已放入暂存区。
初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,且状态为未修改。
未跟踪
而所有其他文件都属于未跟踪文件。它们既没有上次更新时的快照,也不在当前的暂存区域。比如:一个全新的文件。
已修改
在编辑过某些文件之后,Git 将这些文件标为已修改。我们逐步把这些修改过的文件放到暂存区域,然后等最后一次性提交暂存区域的所有文件更新,如此重复。


5.Git 项目仓库常见方法
在现存的目录下,通过导入所有文件来创建新的 Git 仓库从已有的 Git 仓库克隆出一个新的镜像仓库来
一、从当前目录初始化
cd android4.0
git init //初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
git add
git commit -m "bulid   frist android4.0 version "
这样我们就创建了一个新的 Git 仓库

二、从现有仓库克隆
git clone 把项目的Git 仓库复制一份出来
Git 收取的是项目历史的所有数据(每一个文件的每一个版本),服务器上有的数据克隆之后本地也都有了。
实际上,即便服务器的磁盘发生故障,用任何一个克隆出来的客户端都可以重建服务器上的仓库,回到当初克隆时的状态。

命令格式为: git clone [url] [projectName] 
 git clone git://xxx.com/xxx/xxx.git myandroid
  git gc
记录每次更新到仓库

6.远程仓库的使用
同他人协作开发某个项目时,需要管理这些远程仓库,以便推送或拉取数据,分享各自的工作进展。
管理远程仓库的工作,包括添加远程库,移除废弃的远程库,管理各式远程库分支,定义是否跟踪这些分支,等等。

5.1.查看当前的远程库
使用git remote 查看当前配置有哪些远程仓库,至少可以看到一个名为 origin 的远程库,Git 默认使用这个名字来标识你所克隆的原始仓库:
git remote # 列出每个远程库的简短名字
  origin
git remote -v # 显示对应的克隆地址


6.2.添加远程仓库
要添加一个新的远程仓库,可以指定一个简单的名字,以便将来引用格式:git remote add [shortname] [url]:

git remote add mygit git://XXX.com/XXX/XXX.git
现在可以用字串 mygit 指代对应的仓库地址了


6.3.从远程仓库抓取数据
命令 git pull [remote-name]
此命令会到远程仓库中拉取所有你本地仓库中还没有的数据,将远端的数据拉到本地仓库。
运行完成后,你就可以在本地访问该远程仓库中的所有分支,将其中某个分支合并到本地,或者只是取出某个分支
如果是克隆了一个仓库,此命令会自动将远程仓库归于 origin 名下。


6.4.推送数据到远程仓库
项目进行到一个阶段,要同别人分享目前的成果,可以将本地仓库中的数据推送到远程仓库。
实现这个任务的命令很简单: git push [remote-name] [branch-name]。
如果要把本地的 master 分支推送到 origin 服务器上(再次说明下,克隆操作会自动使用默认的 master 和 origin 名字),
可以运行下面的命令:
git push origin master

远程仓库的删除和重命名
git remote rename mygit  mygittest

移除远程仓库
git remote rm mygit

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值