您的位置:首页 > 其它

git版本管理笔记整理

2012-05-19 23:47 288 查看
题记: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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: