git 命令

 

版本控制系统的一个重要任务就是撤销和恢复。git-reset 命令就是为这样的任务而准备的。
git-reset 有三个选项:--mixed、--soft 和 --hard。
第3表杀伤力太大
--mixed 是默认选项,作用是梨园索引内容,定位到指定的项目版本,而不改变你的工作树中的所有内容,只是提示你有哪些文件还未更新

--soft 既不触动索引的位置,也不改变工作树中的任何内容,但是会要求它们处于一个良好的次序之内。会保留你在工作树中的所有更新并使之处于待提交状态。

具体使用可鲜为人知本章的练习题,如果欲查看 git-reset 命令对工作树的影响,可使用 git-status 命令。

如何使用 git 帮助文档
在正文中,总是使用类似 git-reset 这样的命令形式,在终端中实际输入这些指令时,所彩的命令形式又变为git reset。
我猜测这样做的原因是后者作为命令形式对于用户更为友好一些,但查阅时
$ man git-reset

 

 

总结
现在总算是掌握了有关git的一些粗江但非常实用的知识,已具备了使用git管理个人文档的能力,希望大家能积极地使用git来管理你认为需要进行版本控制的个人文档。

化解多人协同动作过程中出现的各种矛盾是推广git 应用的主要原因。

两个人如何协同
Lyr 与 Tzc 是要邢的两们主角。开始着手开发
工作树为 /work/m2ge 后者可通过以下命令获得与之同样的工作树
$ cd work
$ git clone lyr@192.168.0.7:~/work/m2ge m2ge

git-clone 可利用网络协议访问远端机器中的 git 仓库,从中导出完整的工作树到本地
通过 SSH 协议访问了 Lyr机器上的 lyr 账户的 m2ge 仓库并进行导出,从而在当前目录下建立了 m2ge 工作树。m2ge 默认同名的工作树名,此处多余。

一个阶段之后,二人均将所做的工作不断地提交到各自的git仓库中,直到他们觉得有必要将各自所做的工作合并起来之后再进行新的开发阶段。

$ cd ~/work/m2ge
$ git pull tzc@192.168.0.5:~/work/m2ge
git-pull 可将属于同一项目的远端仓库与同样属于同一项目的本地仓库进行合并,包含了两个操作:从远端仓库中取出更新版本,然后合并到本地仓库。
如果 是对不同的文件进行了改动,可以不费周折地完成仓库合并但是倘若二人对一些相同的文件进行了改动,那么在合并时必然会


<<<<<<< HEAD:foo
ONE
=================
one ONE
>>>>>>>>>>>>>>>>1111

以一串 〈 形状的字串表示 Lyr 的当前项目版本对 foo.txt 的修改结果,而以一串 > 形状的字串表示 Tzc 的当前项目版本对 foo.txt 的修改结果。中间用了一串 = 号将二人修改结果隔开。一量理解了重酬冲突的表示格式。将合并处理结果提交到仓库中,即完成了重叠冲突的合并问题的解决。

git-pushi 可将本地版本更新摄像头到远端仓库中
其余三个项目开发流程如下

$ git cloe lyr@192.18.0.7:~/work/m2ge
....项目开发....
$ git add 改动的文件
$ git commit
$ git pull
....解决版本合并问题...
$ git push

在一个协同周期内,Lyr 对m2ge仓库的管理工作相当于管理一份他个人荐一般,因为 m2ge 库是位于他的机器上,他是不需要 git-pull


m2ge 的协同开发
通过 SSH 登录到服务器,寻找合适位置,建立m2ge.git 目录,譬如 /project m2ge.git
然后初始化一个空仓库
$ mkdir -p ~/project/m2ge.git
$ cd ~/project/mwge.git
$ git --bare init --shared

--bare 选项让 m2ge.git 目录等价于一个仓库。将本应当存放在 m2ge.git/.git 中的仓库内容全部放置在 m2ge.git 目录下,就好像仓库完全的裸露在工作树中。

将之推送
$ cd ~/work/m2ge
$ git push m2@192.168.0.2:~/project/m2ge.git master

已经得到了 m2g 仓库的最初版本,并且可以使用 git-clone 命令在本地创建工作目录
$ git clone m2@192.168.0.2:~/project/m2ge.git
之后,我人就可以开始一个又一个协同周期,服务器上的m2ge.git仓库将会逐次记录着。

足以实现 m2ge 初级阶段的协同开发。

 

 

 

 

项目分支管理

较为流行的,虽然也提供了项目分支管理,但是可用性极低。
管理多个荐分支如探囊取物耳。

如何产生项目分支
前面是有一个分支存在的,master 分支(主分支),该分支是由git自动产生的。在此之前,我们针对项目版本的各种操作都是在主分支上进行的,只是我们示察觉它的存在。
git 可以轻松地产生新的项目分支
$ git branch local

初始时完全等同于主分支的,在其上进行的所有版本更新工作都不影响主分支,这意味着作为项目的参与者,可以在local中开始各种各样的更新尝试。
查看项目仓库中存在多少分支,可直接使用 git-branch
$ git branch
local
*master
* 符号,表示此分支为当前分支,

不会自动切换到 local 下,可使用 git-checkout 命令实现分支切换$ git checkout local

分支的合并
在local 分支,进行了诸多修改与数次版本更新提交,如何将这一分支的最终状态提交到 master 分支中呢?
git-merge 可实现丙个分支的合并
$ git checkout master #
$ git merge local

当一个分支检查无误并且与 master 分支成功合并完毕后,那么这一分支基本上就没有存在必要性了,可以删除掉。
$ git branch -d local

对于未有合并的分支是无法删除的,如想强制删除,可以使用 git-branch 的 -D 选项

m2ge 新的协同开发模式

看一看围绕mwge 开发工作的一天中的工作过程
首先,更新自己机器上的工作树,并查看实验室其他成员的版本更新信息
$ git pull
$ git log

开始建立一个新的项目分支,命名为 lyr,并将当前分支切换为该分支

$ git branch lyr
$ git checkout lyr

一天中第八的大部分时间
$ git checkout
$ git merge lyr
$ git branch -d lyr
已经将这一天的工作反题到自己机器上的m2ge mater 分支上了,将其推磅到服务器的 m2ge 仓库。操作之前,需要使用 git0pull 将这一天中其他成员对服务器端的 m2ge 的更新接过来合并到自己的 master 分支,然后才可以将自己的版本更新推送到服务器上的 mwge 仓库

好处:有效保持了要地项目主分支的干净,避免了肯第 git-clone 服务器端的 m2ge 仓库来恢复本地项目主分支

 

 

 

================================ svn-git ===================================================

 

在多个不同机器上进行开发,国奥队开发中,不允许未经测试的代码提交,多次改动可以在本地留下。
svn 可以对源代码,文档,二进制进行管理
git 更便于对源代码进行管理

版本进行集中管理,在头的支持工具,tortoiseSVN,tortoiseGit
提供 repository googlecode,sourceforge ; github.com gitforge

Git 粒度更步,达到版本追溯及查找功能
强大的分支合并功能 可以做到辊有的分支,而不需要像SVN 建分支时需要拷贝文件

版本管理工具对于开发来说很重要,可以保留一一些重要的历史记录

建立本地目录
$mkdirmyproject
$cdmyproject

初始化并获取某个版本
$gigsvnnithttp:// svn的仓库路径
$gitsvnfetch -r xxxx 不指定版本,根据svn记录一级一级获取了
也可合并成一步
$gitsvnclonehttp://xxxmyproject

然后就是通常的本地操作了
gitsvnbebase 可以更新本地文件
gitstatus==svnstatus
每次操作,git都会给出相应的提示
gitconfig--globalcore.whitespacce-trailing-space(git 智能化到一定程度了,这个程序行结尾部分有空格,你可以设置去掉警告
gitsvncommit 假如你要提交

 

 


提交你的修改
git add .
添加当前修改的文件到暂存区

如果你自动追踪文件,包括你已经手动删除的,状态为Deleted的文件
git add -u

提交你的修改
git commit –m &quot;你的注释&quot;


查看文件状态
git status

跟踪新文件
git add readme.txt

从当前跟踪列表移除文件,并完全删除
git rm readme.txt

仅在暂存区删除,保留文件在当前目录,不再跟踪
git rm –cached readme.txt

重命名文件
git mv reademe.txt readme

查看提交的历史记录
git log

修改最后一次提交注释的,利用--amend参数
git commit --amend

忘记提交某些修改,下面的三条命令只会得到一个提交。
git commit –m &quot;add readme.txt&quot;
git add readme_forgotten
git commit –amend

假设你已经使用git add .,将修改过的文件a、b加到暂存区
现在你只想提交a文件,不想提交b文件,应该这样
git reset HEAD b

取消对文件的修改
git checkout –- readme.txt


创建一个分支
git branch iss53

切换工作目录到iss53
git chekcout iss53

将上面的命令合在一起,创建iss53分支并切换到iss53
git chekcout –b iss53


合并iss53分支,当前工作目录为master
git merge iss53

合并完成后,没有出现冲突,删除iss53分支
git branch –d iss53

 

 

 

repository。你可以简单将它理解成一个目录
这个目录通常称为仓库,或者叫版本库。
也不一定必须在空目录下创建Git仓库,选择一个已经有东西的目录也是可以的。
初始化后,在当前目录下会出现一个名为 .git 的目录,所有 Git 需要的数据和资源都存放在这个目录中。
不过目前,仅仅是按照既有的结构框架初始化好了里边所有的文件和目录,但我们还没有开始跟踪管理项目中的任何一个文件。

config 文件包含了项目特有的配置选项,info 目录保存了一份不希望在 .gitignore 文件中管理的忽略模式 (ignored patterns) 的全局可执行文件。hooks 目录保存了客户端或服务端钩子脚本。

另外还有四个重要的文件或目录:HEAD 及 index 文件,objects 及 refs 目录。这些是 Git 的核心部分。

objects 目录存储所有数据内容
refs 目录存储指向数据 (分支) 的提交对象的指针
HEAD 文件指向当前分支
index 文件保存了暂存区域信息

其实只能跟踪文本文件的改动,比如TXT文件,网页,所有的程序代码等等,
在第8行删了一个单词“Windows”。而图片、视频这些二进制文件,虽然也能由版本控制系统管理,但没法跟踪文件的变化,只能把二进制文件每次改动串起来,也就是只知道图片从100KB改成了120KB,但到底改了啥,版本控制系统不知道,也没法知道。

一定要放到NowaMagicOnGit目录下(子目录也行),因为这是一个Git仓库,放到其他地方Git再厉害也找不到这个文件。

和把大象放到冰箱需要3步相比,把一个文件放到Git仓库只需要两步。

第一步,用命令git add告诉Git,把文件添加到仓库:
$ git add readme.txt

执行上面的命令,没有任何显示,这就对了,Unix的哲学是“没有消息就是好消息”,说明添加成功。
第二步,用命令git commit告诉Git,把文件提交到仓库:

1 file changed, 2 insertions(+)
git commit命令执行成功后会告诉你,1个文件被改动(我们新添加的readme.txt文件),插入了两行内容(readme.txt有两行内容)。

 

 

 

 

 

posted @ 2014-06-11 11:05  诊思神  阅读(177)  评论(0编辑  收藏  举报