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

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

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

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

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

18. Git的图形接口

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

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

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

 19. Kindle版本教程

这个教程提供了Kindle版本

20. 问题与讨论

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

21. 链接和文章

Git on Windows

Git Cheat Sheets