- 浏览: 344966 次
文章分类
最新评论
-
亚当爱上java:
"给pre-commit添加可执行权限:chmod ...
svn强制要求提交注释--pre-commit钩子 -
rosasyou:
不知道这篇文章是怎么才让人看的?估计不是浏览器兼容问题。 ,与 ...
Zend Framework的DB处理 -
jinjiankang:
$youngest=`svnlook youngest $sv ...
svn备份策略 -
wangxc:
你好,我按照你介绍的方法在创建完weekly_backup.p ...
svn备份策略 -
yangfuchao418:
...
关于memcached的浅见
http://zhwen.org/?p=articles/git
git使用总结
Git 介绍
最近的小项目想使用git来管理,应为git可以不需要服务器而在任意的Linux机器上管理代码,相对svn和cvs还是有它的优势的,所以我选用了
git来管理我的小项目,以后在提供svn的管理。
在使用了一段时间后想写一点总结,可能也是和网络上其其它的git的文章差不多。但是作为我的使用总结还是很有必要的。
git安lixnus的解释是--The stupid content tracker,
傻瓜内容跟踪器。呵呵!其实一点也不傻了,相当的智能化,也许应该这样说是”content tracker for stupid guy”,呵呵!
git的管理是在本地建立存储仓库,代码的所有变化的记录都在本地存储。也就是代码和管理仓库是形影不理的。不想svn分为客户端和服务器端。客户端只有
一些简单的仓库信息,而真正的代码和代码的变化信息全都在服务器上保存。客户端一般只能得到代码文件(只是一般情况,如果非要得到当然也还是可以的)。所
以git的这种方式可以减轻服务器的负担--不用担心服务器坏了或是连接不到怎么办。
git的配置
所以首先我应当先说git的配置:
Git命令的使用,一般有两种两种形式,一种是git后面带参数(如:git
add),另一种是直接减号连接的一条命令(如:git-add),后面讲解全部使用后者,这样可以避免空格的使用带来的问题。
helight@helight:~/mywork/zhwen.org$ ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/home/helight/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /home/helight/.ssh/id_rsa. Your public key has been saved in /home/helight/.ssh/id_rsa.pub. The key fingerprint is: e0:4a:ba:d9:ba:b9:7a:0a:e4:aa:86:6c:a7:d8:85:c0 helight@helight The key's randomart image is: +--[ RSA 2048]----+ | | | | | . | |. . . | |.E . . S | |o. + . | |+.o o | |==.B | |X=@+. | +-----------------+ helight@helight:~/mywork/zhwen.org$ vim /home/helight/.ssh/ id_rsa id_rsa.pub known_hosts
生成密钥,用户通信加解密。如果接受默认设置,那么生成2048bits RAS的密钥,私钥和公钥文件分别位于:~/.ssh/id_rsa和~/.ssh/id_rsa.pub。用户需要向服务器管理员提供公钥 (id_rsa.pub),在用户同步版本库时对用户进行身份认证。用户必须妥善保管私钥。
helight@helight:~/kernel-mod/hello$ git-config user.name Zhwen Xu helight@helight:~/kernel-mod/hello$ git-config user.email Helight.Xu@gmail.com
配置用户名,在生成补丁、日志时使用。git-config命令带--global选项是对所有用户信息进行配置,默认只针对对当前用户。
git-config中写入配置信息。 如果git-config加了--global选项,配置信息就会写入到~/.gitconfig文件中。
因为你可能用不同的身份参与不同的项目,而多个项目都用git管理,所以建议不用global配置。
用户可以通过git-config的其他选项来对git做其他配置,--list可以查看用户已经选项。如:
helight@helight:~/kernel-mod/hello$ git-config --list user.name=Zhwen Xu user.email=Helight.Xu@gmail.com core.repositoryformatversion=0 core.filemode=true core.bare=false core.logallrefupdates=true helight@helight:~/kernel-mod/hello$
git的使用
命令:git-init-db 在我们要管理的目录中执行这条命令即可建立相关的git数据库文件。 我们首先以一个小例子来说,如下在hello这个文件夹中有两个文件,一个c程序和一个Makefile文件。
helight@helight:~/kernel-mod/hello$ ls -a . .. hello.c Makefile helight@helight:~/kernel-mod/hello$
接着执行上面所说的命令:
helight@helight:~/kernel-mod/hello$ git-init-db Initialized empty Git repository in /home/helight/kernel-mod/hello/.git/ helight@helight:~/kernel-mod/hello$ ls -a . .. .git hello.c Makefile helight@helight:~/kernel-mod/hello$
执行完上面的命令之后用“ls -a”来看,就会发现多了一个“.git”的文件,这个文件就是hello个小项目的git仓库。关于这个仓库有兴趣的读者可以进入该文件夹继续分析。 接下来介绍如何将项目中的文件添加到仓库中,让git来作版本管理。将文件添加到git仓库中的命令是git-add,当然这并不是真的将文件copy到 git的仓库文件夹中。只是在仓库中标识它,以示要用它git来管理它了。具体操作如下:
helight@helight:~/kernel-mod/hello$ git-add hello.c helight@helight:~/kernel-mod/hello$ git-add * helight@helight:~/kernel-mod/hello$
可以看到添加可以是单个文件添加,也可以是多个文件一起添加。接下来是提交和项目状态的查看。相信有了前面的一点说明大家对git的管理也多少有点感觉了 吧!
项目的提交和状态查看:
命令:git-commit, git-status
helight@helight:~/kernel-mod/hello$ git-status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached ..." to unstage) # # new file: Makefile # new file: hello.c # helight@helight:~/kernel-mod/hello$ git-commit -m "init the project" ./* Created initial commit f4808f0: init the project 2 files changed, 27 insertions(+), 0 deletions(-) create mode 100644 Makefile create mode 100644 hello.c helight@helight:~/kernel-mod/hello$ git-status # On branch master nothing to commit (working directory clean) helight@helight:~/kernel-mod/hello$
第一个“git-status”的提示信息告诉我们版本库中加入了两个新的文件(这是和上一个版本的变化),并且 git 提示我们提交这些文件,我们可以通过 git-commit 命令来提交。提交后再次使用就会提示没有变化需要提交了。
分支管理:
git主要提倡的一种管理方式就是分支管理,所以这应该是每一个学习git的人应该掌握的。
分支查看,分支建立和分支切换:
helight@helight:~/kernel-mod/hello$ git-branch * master helight@helight:~/kernel-mod/hello$ git-branch helight helight@helight:~/kernel-mod/hello$ git-branch helight * master helight@helight:~/kernel-mod/hello$ git-checkout helight Switched to branch "helight" helight@helight:~/kernel-mod/hello$ git-branch * helight master helight@helight:~/kernel-mod/hello$
可以看出“git-branch”是查看分支情况和创建分支,”git-checkout”个用来切换分支。其中“*”表示当前工作的分支。
删除分支:git-branch -D xxx
helight@helight:~/kernel-mod/hello$ git-branch xux helight@helight:~/kernel-mod/hello$ git-branch * helight master xux helight@helight:~/kernel-mod/hello$ git-branch -D xux Deleted branch xux. helight@helight:~/kernel-mod/hello$ git-branch * helight master helight@helight:~/kernel-mod/hello$
分支差异查看:git-show-branch,git-diff,git-whatchanged
我们对文件修改一下后在查看。
helight@helight:~/kernel-mod/hello$ git-show-branch * [helight] init the project ! [master] init the project -- *+ [helight] init the project
git-diff:上次提交到现在的变化差异
helight@helight:~/kernel-mod/hello$ git-diff diff --git a/hello.c b/hello.c index 843a6b8..c762de7 100644 --- a/hello.c +++ b/hello.c @@ -14,6 +14,7 @@ static int __init hello_init(void) static void __exit hello_exit(void) { printk("kernel: %s\n","Bey world!"); + printk("kernel: %s\n","Bey world!"); } module_init(hello_init);
git-commit:提交
helight@helight:~/kernel-mod/hello$ git-commit -m "some change" ./* Created commit 2d900d9: some change 1 files changed, 1 insertions(+), 0 deletions(-)
git-whatchanged:查看本分支的修改情况
helight@helight:~/kernel-mod/hello$ git-whatchanged commit 2d900d918d24943b32f3d41b1974e0375be02c9e Author: Zhenwen Xu Date: Wed Nov 12 22:09:45 2008 +0800 some change :100644 100644 843a6b8... c762de7... M hello.c commit f4808f013f44e815831a3830a19925472be83424 Author: Zhenwen Xu Date: Wed Nov 12 21:53:52 2008 +0800 init the project :000000 100644 0000000... c151955... A Makefile :000000 100644 0000000... 843a6b8... A hello.c helight@helight:~/kernel-mod/hello$
譬如我们要查看标号为 master和helight的版本的差异情况, 我们可以使用这样的命令:
helight@helight:~/kernel-mod/hello$ git-diff helight master diff --git a/hello.c b/hello.c index c762de7..843a6b8 100644 --- a/hello.c +++ b/hello.c @@ -14,7 +14,6 @@ static int __init hello_init(void) static void __exit hello_exit(void) { printk("kernel: %s\n","Bey world!"); - printk("kernel: %s\n","Bey world!"); } module_init(hello_init); helight@helight:~/kernel-mod/hello$ 补丁制作: git-format-patch helight@helight:~/kernel-mod/hello$ vim hello.c helight@helight:~/kernel-mod/hello$ git-commit -m "change by helight" hello.c Created commit 4772773: change by helight 1 files changed, 1 insertions(+), 0 deletions(-)
制作用于邮件发送的补丁:
helight@helight:~/kernel-mod/hello$ git-format-patch -s master 0001-change-by-helight.patch helight@helight:~/kernel-mod/hello$ cat 0001-change-by-helight.patch From 4772773ecbbde66b8febc1d8aed0da67d480f1e4 Mon Sep 17 00:00:00 2001 From: Zhenwen Xu Date: Thu, 13 Nov 2008 10:30:10 +0800 Subject: [PATCH] change by helight Signed-off-by: Zhenwen Xu --- hello.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) diff --git a/hello.c b/hello.c index 89795d2..2cbf9ee 100644 --- a/hello.c +++ b/hello.c @@ -6,6 +6,7 @@ MODULE_LICENSE("GPL"); static int __init hello_init(void) { printk("kernel: %s\n","Hello world!"); + printk("kernel: %s\n","This is Helight.Xu!"); return 0; } -- 1.5.6.5 helight@helight:~/kernel-mod/hello$
分支合并:git-merge
现在我们看看怎么将helight分支上的工作合并到master分支中。现在转移我们当前的工作分支到 master,并且将helight分支上的工作合并进来。
helight@helight:~/kernel-mod/hello$ git-checkout master Switched to branch "master" helight@helight:~/kernel-mod/hello$ git-merge "merge helight" HEAD helight Updating f4808f0..2d900d9 Fast forward hello.c | 1 + 1 files changed, 1 insertions(+), 0 deletions(-) helight@helight:~/kernel-mod/hello$
但是更多的是将现在的工作pull到主分支上去,如下命令:
helight@helight:~/kernel-mod/hello$ vim hello.c helight@helight:~/kernel-mod/hello$ git-commit -m "another change" ./* Created commit 1d6b878: another change 1 files changed, 0 insertions(+), 3 deletions(-)
git-pull:将工作更新到分支上
helight@helight:~/kernel-mod/hello$ git-checkout master Switched to branch "master" helight@helight:~/kernel-mod/hello$ git-pull . helight From . * branch helight -> FETCH_HEAD Updating 2d900d9..1d6b878 Fast forward hello.c | 3 --- 1 files changed, 0 insertions(+), 3 deletions(-)
现在来看看如何退回到上一个版本:git-reset
命令形式:
git-reset [ --soft | --hard] []
命令的选项:
--soft
恢复到 git-commit命令之前,但是所作的修改是不会发生变化的。
--hard
将工作树中的内容和头索引都切换至指定的版本位置中,也就是说自上上一个git-commit命令之后的所有的跟踪内容和工作树中的内容都会全部丢失。
因此,这个选项要慎用,除非你已经非常确定你的确不想再看到那些东西了。
git信息查看和日志查看:
git-log
git-show
git-show-branch
git-show-index
git-show-ref
发表评论
-
图片压缩的一些心得
2010-11-03 11:45 2003http://blog.lizhigang.net/arc ... -
PHP程序员面临的成长瓶颈
2010-10-25 10:06 2015作为Web开发中应用最广泛的语言之一,PHP有着大量的粉丝 ... -
URL重写相关
2010-07-26 18:13 1209初级URL重写指南 http://lamp.lin ... -
关于PHP的mod_rewrite重写模块技术个人觉得最好的一篇文章
2010-07-26 09:30 2254最近手里一个PHP项目要用到mod_rewrite模块,很 ... -
PHP源代码分析- tick(s)
2010-07-24 10:13 1977By Altair, http://www.phpint ... -
php多线程编程
2010-07-21 23:52 1057http://www.cnblogs.com/niniwzw/ ... -
php pcntl_fork和pcntl_fork 的用法
2010-07-21 22:23 2140http://www.jb51.net/article/177 ... -
探讨高并发写入文件内容
2010-07-11 22:48 2824读写相关的问题是永远存在的,文件锁就是为了解决这个问题而做的, ... -
php中,高并发状态下文件的读写
2010-07-11 22:28 8781对于日IP不高或者说并发数不是很大的应用,一般不用考虑这些 ... -
HTTP POST from PHP, without cURL
2010-07-06 17:28 1620Update May 2010: This is one ... -
php fsockopen解决办法。
2010-07-06 15:07 3175Author:David | English Ver ... -
用 PHP V5 开发多任务应用程序
2010-07-04 00:39 1228http://www.ibm.com/developerw ... -
Linux消息队列原理与应用
2010-07-02 18:03 9512http://www.wanglong-neu.cn/ ... -
我说PHPer的水平区分(转载)
2010-07-02 10:55 1465说句实话,写这个真够无 ... -
正则表达式解题经验谈
2010-06-29 22:08 1091正则表达式解题经验谈 ... -
深入浅出之正则表达式
2010-06-28 21:14 799dragon.cnblogs.com/archive/2006 ... -
stream_set_blocking让程序无阻塞
2010-06-28 09:48 1381stream_set_blocking让程序 ... -
什么是Socket?Socket协议的形象描述
2010-06-28 00:11 1581socket的英文原义是“ ... -
完善匹配中文的Php正则表达式
2010-06-11 16:15 2293这段时间试图使用php正 ... -
php反射
2010-06-07 20:14 15171。用途: 该扩展分析php程序,导出或提取出关于类、方法、属 ...
相关推荐
### Git使用总结 #### 一、本地项目上传到GitHub步骤详解 **1. 创建本地版本库** - **步骤:** 在本地计算机上选择一个位置创建一个新的文件夹,并使用`git init`命令将其初始化为Git仓库。 - **命令示例:** `...
在本文中,我们将总结一些基本的Git使用步骤,帮助初学者快速上手。 首先,完成Git的安装后,你可以通过打开Git Bash来开始使用Git。Git Bash是一个模拟Unix/Linux环境的命令行工具,它允许你在Windows操作系统中...
在IT工作中,经常用到git,在此,对git的一些常用命令做了一下总结,对于git更丰富的用途没有过多涉及。
git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git常用命令总结git...
git使用说明超级详细的总结分类,使用mindManager完成资源分类
本文档是关于Git使用的一个全面学习手册,涵盖了从基础到高级的众多知识点,旨在帮助读者系统学习和掌握Git操作。 ## Git概念与目的 Git是一个开源的分布式版本控制系统,由Linus Torvalds于2005年创建。它的目标...
### Git使用教程核心知识点 #### 一、Git简介与应用场景 **Git** 是一款开源的分布式版本控制系统,用于跟踪在软件开发过程中对文件所做的更改。它最初由Linus Torvalds于2005年创建,目的是为了更高效地管理Linux...
Git是目前世界上最先进的分布式版本控制系统。以上为git命令总结。
总结来说,Git 作为一款强大的版本控制系统,极大地促进了团队协作和代码管理。掌握 Git 的使用,不仅可以帮助开发者更好地追踪和管理代码变更,还能提升项目的透明度和可维护性。无论是个人项目还是大型企业级开发...
### Git使用手册精要 #### 一、Git简介与版本控制系统概念 **Git** 是一款全球范围内使用最为广泛且先进的分布式版本控制系统。它能够自动记录每次文件的改动情况,包括文件的添加、修改以及删除等操作。对于软件...
这是我对git使用的一个总结,对想要了解git如何使用,并致力于理清楚git相关知识点的朋友有所帮助
### Git使用入门知识点详解 #### 一、Git简介与应用场景 **Git** 是一款开源的分布式版本控制系统,用于跟踪在软件开发过程中对文件所做的更改。它最初由Linus Torvalds于2005年创建,目的是为了更高效地管理Linux...
在日常开发工作中,Git作为版本控制系统被广泛使用,它能帮助团队高效地管理代码版本,提高协同工作的效率。本文将根据给定的文件信息,详细总结并解释Git中的常见命令及其用途。 #### 1. Git与SVN的区别 - **Git**...
创建git仓库可以在远端创建一个仓库, 然后check到本地,在本地的文件里创建工程文件,然后提交 也可以将本地现有的工程和远端的空仓库关联 本地创建了一个工程 iOSDemo 运行没有错误,就可以提交到远端了。 一般...
总结的git使用大全,和中兴通信的git使用规范。
Git的使用总结与远程仓库GitHub
git 学习总结脑图记录git内部原理
### git操作命令总结 #### 一、配置与初始化 **标题和描述中提及的知识点:** - **配置用户信息:** 使用 `git config --global user.name "zoujun"` 和 `git config --global user.email "zoujun@youku.com"` 来...