11. 创建和应用补丁

一个补丁指的是一个包含对源代码进行修改的文本文件。你可以将这个文件发送给某人,然后他就可以应用这个补丁到他的本地仓库

下面会创建一个分支,对这个分支所一些修改,然后创建一个补丁,并应用这个补丁到master分支

  1. # Create a new branch 
  2. git branch mybranch 
  3. # Use this new branch 
  4. git checkout mybranch 
  5. # Make some changes 
  6. touch test05 
  7. # Change some content in an existing file 
  8. echo "New content for test01" >test01 
  9. # Commit this to the branch 
  10. git add . 
  11. git commit -a -m "First commit in the branch" 
  12.  
  13. # Create a patch --> git format-patch master 
  14. git format-patch origin/master 
  15. # This created patch 0001-First-commit-in-the-branch.patch  
  16.  
  17. # Switch to the master 
  18. git checkout master  
  19.  
  20. # Apply the patch 
  21. git apply 0001-First-commit-in-the-branch.patch 
  22. # Do your normal commit in the master 
  23. git add . 
  24. git commit -a -m "Applied patch" 
  25.   
  26. # Delete the patch 
  27. rm 0001-First-commit-in-the-branch.patch 


12. 定义同名命令

Git允许你设定你自己的Git命令。你可以给你自己常用的命令起一个缩写命令,或者合并几条命令道一个命令上来。

下面的例子中,定义了git add-commit 命令,这个命令合并了git add . -A git commit -m 命令。定义这个命令后,就可以使用git add-commit -m "message" .

  1. git config --global alias.add-commit '!git add . -A && git commit' 

但是非常不幸,截止写这篇文章之前,定义同名命令在msysGit中还没有支持。同名命令不能以!开始。

13. 放弃跟踪文件

有时候,你不希望某些文件或者文件夹被包含在Git仓库中。但是如果你把它们加到.gitignore文件中以后,Git会停止跟踪这个文件。但是 它不会将这个文件从仓库中删除。这导致了文件或者文件夹的最后一个版本还是存在于仓库中。为了取消跟踪这些文件或者文件夹,你可以使用如下的命令

  1. # Remove directory .metadata from git repo 
  2. git rm -r --cached .metadata 
  3. # Remove file test.txt from repo 
  4. git rm --cached test.txt 
  5. 这样做不会将这些文件从commit历史中去掉。如果你想将这些文件从commit历史中去掉,
  6. 可以参考git filter-branch命令  

 

14. 其他有用的命令

下面列出了在日常工作中非常有用的Git命令

Table 2. 有用的Git命令

命令

描述

git blame filename

谁创建了或者是修改了这个文件

git checkout -b mybranch master~1

以上上个commit信息为起点,创建一条新的分支

15. 安装Git服务

如上所述,我们的操作不需要Git服务。我可以只使用文件系统或者是Git仓库的提供者,像GithubBitbucket。但是,有时候,拥有一个自己的服务是比较方便的,在ubuntu下安装一个服务相对来说是比较容易的

确定你已经安装了ssh

  1. apt-get install ssh  

如果你还没有安装Git服务,安装它 

  1. sudo apt-get install git-core  

添加一个名为git的用户

  1. sudo adduser git   

然后使用git用户进行登陆,创建一个空的仓库

  1. # Login to server 
  2. # to test use localhost 
  3. ssh git@IP_ADDRESS_OF_SERVER  
  4.  
  5. # Create repository 
  6. git init --bare example.git

现在你就可以向远端的仓库提交变更了

  1. mkdir gitexample 
  2. cd gitexample 
  3. git init 
  4. touch README 
  5. git add README 
  6. git commit -m 'first commit' 
  7. git remote add origin git@IP_ADDRESS_OF_SERVER:example.git 
  8. git push origin maste 

16. 在线的远端仓库

16.1. 克隆远端仓库

Git支持远端的操作。Git支持多种的传输类型,Git自带的协议就叫做git。下面的的命令通过git协议从克隆一个仓库 

  1. git clone git@github.com:vogella/gitbook.git 

 同样的,你可以通过http协议来克隆仓库 

 

  1. # The following will clone via HTTP 
  2. git clone http://vogella@github.com/vogella/gitbook.git 

16.2. 添加远端仓库

如果你克隆了一个远端仓库,那么原先的仓库就叫做origin

你可以push修改到origin中,通过 git push origin 命令. 当然,push到一个远端的仓库需要对仓库的写权限

你可以通过git remote add name gitrepo 命令添加多个仓库。例如,你可以通过http协议再次添加之前clone过来的仓库:

  1. // Add the https protocol 
  2. git remote add githttp https://vogella@github.com/vogella/gitbook.git 

 16.3. 通过http和代理服务器进行远端操作

如果你的防火墙屏蔽了出http以外的所有协议,那么使用http协议来获取仓库是非常好的方法。.

Git同样支持通过代理服务器使用http协议。下面的Git命令会展示这一点。你可以为所有的程序设置代理服务器或者只是为Git服务提供。

下面的例子用到了环境变量 

  1. # Linux 
  2. export httphttp_proxy=http://proxy:8080 
  3. # On Windows 
  4. # Set httphttp_proxy=http://proxy:8080 
  5. git clone http://dev.eclipse.org/git/org.eclipse.jface/org.eclipse.jface.snippets.git 
  6. # Push back to the origin using http 
  7. git push origin 

下面的例子只是用到了Git的配置

  1. // Set proxy for git globally 
  2. git config --global http.proxy http://proxy:8080 
  3. // To check the proxy settings 
  4. git config --get http.proxy 
  5. // Just in case you need to you can also revoke the proxy settings 
  6. git config --global --unset http.proxy 


17. Git服务提供商

除了假设自己的服务,你也可以使用Git服务提供商提供的服务。最流行的Git服务提供网站是GitHubBitbucket。它们都提供了有限制的免费服务

17.1. GitHub

可以通过 https://github.com/ 访问GitHub. GitHub上所有的公开仓库都是免费的。如果你想在上面使用私有的仓库,那么就需要付费给GitHub

GitHub需要你创建ssh的公钥私钥。生成一份Ubuntu的公钥私钥可以访问 ssh key creation in Ubuntu Windows环境可以访问msysgit ssh key generation .

GitHub上创建一个账户和一个仓库以后。你会收到如何将你的项目上传到GitHUb的指南,其中的命令大致如下: 

  1. Global setup: 
  2.  Set up git 
  3.   git config --global user.name "Your Name" 
  4.   git config --global user.email your.email@gmail.com      
  5.  
  6. Next steps: 
  7.   mkdir gitbook 
  8.   cd gitbook 
  9.   git init 
  10.   touch README 
  11.   git add README 
  12.   git commit -m 'first commit' 
  13.   git remote add origin git@github.com:vogella/gitbook.git 
  14.   git push -u origin master      
  15.  
  16. Existing Git Repo? 
  17.   cd existing_git_repo 
  18.   git remote add origin git@github.com:vogella/gitbook.git 
  19.   git push -u origin master  

17.2. Bitbucket

 可以通过 https://bitbucket.org/ 访问Bitbucket. Bitbucket 提供了无限制了公共仓库和只能有五个人访问的私有仓库。如果你需要超过五个人访问私有仓库,就需要付费给Bitbucket

18. Git的图形接口

这个教程主要说明Git命令行的使用。完成了这个教程以后,你可能想要找到一个Git的图形工具

Git提供了两个图形工具。 gitk能够展示仓库的历史信息、git gui 让你可以通过编辑器来完成Git操作

Eclipse EGit 项目提供了GitEclipse的集成,在最新的Eclipse版本中可以找到

 19. Kindle版本教程

这个教程提供了Kindle版本

20. 问题与讨论

在提出问题之前,请先查看 vogella FAQ. 如果你有任何的问题或者是从文章中找到错误,那么可以使用www.vogella.com Google Group我自己写了一个简短的列表 how to create good questions  可能会对你有用.

21. 链接和文章

Git homepage

EGit - Teamprovider for Eclipse

Video with Linus Torwalds on Git

Progit book - Free Git book

Video casts about Git

http://code.google.com/p/msysgit/ Git on Windows

http://github.com/guides/git-cheat-sheet Git Cheat Sheets