Git使用指南


为何是Git

对于Git与其他集中式代码管理工具相比的优缺点的全面讨论,请参见这里。这样的争论总是喋喋不休。作为一个开发者,与现今的其他开发工具相比较,我更喜欢Git。Git真得改变了开发者对于合并和分支的思考。我曾经使用经典的CVS/Subversion,然而每次的合并/分支和其他行为总让人担惊受怕(“小心合并里的冲突,简直要命!”)。 但是对于Git来说,这些行为非常简单和搞笑,它们被认为是日常工作中的核心部分。例如,在很多CVS/Subversion书里,分支与合并总是在后面的章节中被讨论(对于高级用户使用),然而在每个Git中,在第3章就已经完全涵盖了(作为基础)。 简单和重复的特性带来的结果是:分支与合并不再是什么可以害怕的东西。分支/合并被认为对于版本管理工具比其他功能更重要。 关于工具,不再多说,让我们直接看开发模型吧。这个模型并不是如下模型:在管理软件开发进度方面,面对每个开发过程,每个队员必须按一定次序开发。


初次运行 Git 前的配置

$ git config --global user.name "John Doe"
$ git config --global user.email johndoe@example.com

更多信息可以参考:Git 起步


快速开始

将本地项目Inmi, 推送到http://luxtone.red16.com:88/inmi.git

git init
git add *
git commit -m "" --allow-empty-message
git remote add origin http://luxtone.red16.com:88/inmi.git
git push -u origin master

如果在Inmi文件夹中已经创建本地仓库

git remote add origin http://luxtone.red16.com:88/inmi.git
git push -u origin master

常见问题

忽略某些文件

在工作根目录中添加一个叫.gitignore的文件,来告诉Git系统要忽略 掉哪些文件,下面是文件内容的示例:

# 以'#' 开始的行,被视为注释.
# 忽略掉所有文件名是 foo.txt 的文件.
foo.txt
# 忽略所有生成的 html 文件,
*.html
# foo.html是手工维护的,所以例外.
!foo.html
#  忽略所有.o 和 .a文件.
*.[oa]
#  忽略.svn目录
.svn

添加空目录

Git 和 SVN 不同,仅仅跟踪文件的变动,不跟踪目录。可以在空目录下添加一个空文件, 常用.gitignore 或者 .gitkeep

find . -type d -empty -exec touch {}/.gitignore \;

从SVN导入

clone-url替换为真实SVN地址

git svn clone clone-url


git-flow 一个成功的Git分支模型

git-flow 是一个 git 扩展集,按 Vincent Driessen 的分支模型提供高层次的库操作。 查看详情

特性

  1. 为即将发布的版本开发新功能特性。
  2. 这通常只存在开发者的库中。
  3. 新特性的开发是基于 develop 分支的。

release版本

  1. 支持一个新的用于生产环境的发布版本。
  2. 允许修正小问题,并为发布版本准备元数据。

热点

  1. 热点修复来自这样的需求:生产环境的版本处于一个不预期状态,需要立即修正。
  2. 有可能是需要修正 master 分支上某个 TAG 标记的生产版本。

git-flow命令

Git-flow commands

TopGit

TopGit aims to make handling of large amounts of interdependent topic branches easier.


参考资料

git - 简易指南 Git教程 git-flow 备忘清单 一个成功的Git分支模型 A successful Git branching model Pro Git git –fast-version-control GitHub Help TopGit - A different patch queue manager GitHub Flow Like a Pro with these 13 Git Aliases

Yan Peipan 06 December 2014