专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »编程综合 » Git教程( 3):Git工作流程 »正文

Git教程( 3):Git工作流程

来源: 发布时间:星期日, 2009年12月20日 浏览:0次 评论:0
  现在你已经有个git本地仓库切都配置完毕然后该如何办?

  般来说跟其他源码控制系统工作流程没什么两样个区别就是载入(stage)过程整个工作流程大致是这样(流程1):

  和远程仓库同步

  修改文件

  查看变更

  载入变更

  提交载入变更

  重复

  上传

  这是最复杂情况如果你不和别人合作开发就不需要上传到仓库中去(流程2):

  * 修改文件

  * 提交变更

  * 重复

  简单吧要记得git是分布式所以如果不是合作项目实际上不需要提交到个公共共享服务器上--你可以像使用RCS只用来追踪本地文件变更下面让我们先来看个简单举例紧接着再来看用git协作开发例子

  简单举例

  如果你想跟着做这个例子请克隆这个项目:

  $ git clone git://github.com/schacon/simplegit

  例子开始按照流程2我们首先要修改README文件将自己添加到项目作者中去所以我们修改这个文件然后我们希望提交这个变更所以我们运行'git commit -a' 命令 -a 意思是告诉git先将变更了文件先载入(stage)然后提交-我们后面会通过'staging area'命令实现但是现在运行 'git commit -a' 命令效果跟在SVN中使用'commit'命令

  $ git commit -a

  执行完的后个提交信息提示会出现在编辑器中(这里$EDITOR环境变量或'core.editor'这两个git配置变量默认值都是vim)类似下面这样内容:

  _

# Please enter the commit message for your changes. Lines starting
# with '#' will be ignored, and an empty message aborts the commit.
# On branch 
# Changes to be committed:
#   (use "git re HEAD <file>..." to unstage)
#
# modied:   README
#                                                                      
~                                                                                      
~                                                                                      
".git/COMMIT_EDITMSG" 9L, 253C


  输入些提交信息譬如"added myself to the README as an author"然后退出

  vim操作提示:

  按下I,o,a进入编辑模式编辑完毕按Esc输入:wq保存退出

  然后会看到这样提示:

[master]: created 5896d4d: "added myself to the README as an author"
 1 files changed, 2 insertions(+), 1 deletions(-)


  显示我们刚刚输入提交信息并且有组有关这次提交项目中文件变更统计数字同时还给我们个提交校验和'5896d4d',这个校验和可以用来日后确切查看这次提交细节

  这就是简单用例修改文件'git commit -a'重复

  协作开发举例

  现在我们来介绍个复杂点例子这次我们使用远程仓库将项目上传上去从而跟其他开发者起协同工作同时我们会介绍staging area

  如果你会从远程仓库中克隆项目那么和远程仓库项目同步也是相当简单--只需要执行'git pull'.如果是远程仓库项目没有变化也就是说其他开发者没有对项目进行变更会显示这样信息:

  Already up-to-date.

  相反执行这条命令的后会将你上次同步的后远程仓库中变更同步到本地项目中并且git会合并这些新变更:

$ git pull
Updating c264051..b04dc3d
Fast forward
 lib/simplegit.rb |    4 
 1 files changed, 4 insertions(+), 0 deletions(-)


  例子开始重新克隆远程仓库中项目修改README文件和lib/simplegit.rb文件(不要执行git commit -a)现在你可以使用'git status'命令来查看工作目录发生了什么变更:

$ git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
# modied:   README
# modied:   lib/simplegit.rb
#
no changes added to commit (use "git add" and/or "git commit -a")


  我们看到有两个文件是在"changed but not updated"段落中出现 这意味着这两个文件还没有载入(unstaged). 如果现在我们提交什么也不会发生也就是说文件必须先载入(stage)然后才能提交



  所以我们先来载入(stage) 文件git中使用'git add'命令不仅可以开始追逐文件而且可以对他们载入stage变更所以让我们载入(stage) README文件变更然后再来查看下状态

$ git add README
$ git status
# On branch master
# Changes to be committed:
#   (use "git re HEAD <file>..." to unstage)
#
# modied:   README
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
# modied:   lib/simplegit.rb


  现在'lib/simplegit.rb'文件还是未载入(unstaged), 但是README文件现在已经到了'changes to be committed'段落中-它几经载入(stage)了现在如果我们运行提交命令(不要-a,这个会自动stage所有东西)只有这个文件会被提交-而simplegit.rb依然是unstaged这时我们使用-m选项来执行'git commit'这样后面跟上串表示这次提交信息

$ git commit -m 'updated the README'
[master]: created 14bb3c6: "updated the README"
 1 files changed, 1 insertions(+), 2 deletions(-)


  如果现在再执行'git status'我们会看到stage的后文件现在已经提交了只剩下了unstaged'simplegit.rb'文件

$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
# modied:   lib/simplegit.rb
#


  现在我们可以stage并且提交这个文件:

$ git commit -a -m 'added a staging command to the library'
[master]: created bbaee85: "added a staging command to the library"
 1 files changed, 4 insertions(+), 0 deletions(-)
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 2 commits.
#
nothing to commit (working directory clean)




  现在我们已经将两次提交变更都搞定了而且加了提交信息可以让我们合作伙伴很容易理解我们做变更经过最后次提交我们看到'git status'执行的后显示我们工作目录clean了(同时提示我们现在分枝上有两个提交还没有上传)

  所以现在我们将这些变更上传到服务器端和我们合作伙伴分享前提是我们有上传权限(如果没有上传权限我们可以在网络上创建个自己git仓库将其上传)然后让朋友下载

  运行'git push'会将我们变更上传到服务器

$ git push
Counting objects: 11, done.
Compressing objects: 100% (6/6), done.
Writing objects: 100% (7/7), 744 s, done.
Total 7 (delta 3), reused 0 (delta 0)
To [email protected]:schacon/simplegit.git
   b04dc3d..bbaee85  master -> master


  到目前为止我们看到了新数据都已经上传完毕服务器上主分支也已经更新了现在我们可以复习下这整个过程让我们可以更加熟练将git应用到我们项目中去



标签:
0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: