一个补丁指的是一个包含对源代码进行修改的文本文件。你可以将这个文件发送给某人,然后他就可以应用这个补丁到他的本地仓库
下面会创建一个分支,对这个分支所一些修改,然后创建一个补丁,并应用这个补丁到master分支
- # Create a new branch
- git branch mybranch
- # Use this new branch
- git checkout mybranch
- # Make some changes
- touch test05
- # Change some content in an existing file
- echo "New content for test01" >test01
- # Commit this to the branch
- git add .
- git commit -a -m "First commit in the branch"
- # Create a patch --> git format-patch master
- git format-patch origin/master
- # This created patch 0001-First-commit-in-the-branch.patch
- # Switch to the master
- git checkout master
- # Apply the patch
- git apply 0001-First-commit-in-the-branch.patch
- # Do your normal commit in the master
- git add .
- git commit -a -m "Applied patch"
- # Delete the patch
- rm 0001-First-commit-in-the-branch.patch
Git允许你设定你自己的Git命令。你可以给你自己常用的命令起一个缩写命令,或者合并几条命令道一个命令上来。
下面的例子中,定义了git add-commit 命令,这个命令合并了git add . -A 和git commit -m 命令。定义这个命令后,就可以使用git add-commit -m "message" 了.
- git config --global alias.add-commit '!git add . -A && git commit'
但是非常不幸,截止写这篇文章之前,定义同名命令在msysGit中还没有支持。同名命令不能以!开始。
有时候,你不希望某些文件或者文件夹被包含在Git仓库中。但是如果你把它们加到.gitignore文件中以后,Git会停止跟踪这个文件。但是 它不会将这个文件从仓库中删除。这导致了文件或者文件夹的最后一个版本还是存在于仓库中。为了取消跟踪这些文件或者文件夹,你可以使用如下的命令
- # Remove directory .metadata from git repo
- git rm -r --cached .metadata
- # Remove file test.txt from repo
- git rm --cached test.txt
- 这样做不会将这些文件从commit历史中去掉。如果你想将这些文件从commit历史中去掉,
- 可以参考git filter-branch命令
下面列出了在日常工作中非常有用的Git命令
命令 |
描述 |
git blame filename |
谁创建了或者是修改了这个文件 |
git checkout -b mybranch master~1 |
以上上个commit信息为起点,创建一条新的分支 |
如上所述,我们的操作不需要Git服务。我可以只使用文件系统或者是Git仓库的提供者,像Github或Bitbucket。但是,有时候,拥有一个自己的服务是比较方便的,在ubuntu下安装一个服务相对来说是比较容易的
确定你已经安装了ssh
- apt-get install ssh
如果你还没有安装Git服务,安装它
- sudo apt-get install git-core
添加一个名为git的用户
- sudo adduser git
然后使用git用户进行登陆,创建一个空的仓库
- # Login to server
- # to test use localhost
- ssh git@IP_ADDRESS_OF_SERVER
- # Create repository
- git init --bare example.git
- mkdir gitexample
- cd gitexample
- git init
- touch README
- git add README
- git commit -m 'first commit'
- git remote add origin git@IP_ADDRESS_OF_SERVER:example.git
- git push origin maste
Git支持远端的操作。Git支持多种的传输类型,Git自带的协议就叫做git。下面的的命令通过git协议从克隆一个仓库
- git clone git@github.com:vogella/gitbook.git
同样的,你可以通过http协议来克隆仓库
- # The following will clone via HTTP
- git clone http://vogella@github.com/vogella/gitbook.git
如果你克隆了一个远端仓库,那么原先的仓库就叫做origin
你可以push修改到origin中,通过 git push origin 命令. 当然,push到一个远端的仓库需要对仓库的写权限
你可以通过git remote add name gitrepo 命令添加多个仓库。例如,你可以通过http协议再次添加之前clone过来的仓库:
- // Add the https protocol
- git remote add githttp https://vogella@github.com/vogella/gitbook.git
如果你的防火墙屏蔽了出http以外的所有协议,那么使用http协议来获取仓库是非常好的方法。.
Git同样支持通过代理服务器使用http协议。下面的Git命令会展示这一点。你可以为所有的程序设置代理服务器或者只是为Git服务提供。
下面的例子用到了环境变量
- # Linux
- export httphttp_proxy=http://proxy:8080
- # On Windows
- # Set httphttp_proxy=http://proxy:8080
- git clone http://dev.eclipse.org/git/org.eclipse.jface/org.eclipse.jface.snippets.git
- # Push back to the origin using http
- git push origin
- // Set proxy for git globally
- git config --global http.proxy http://proxy:8080
- // To check the proxy settings
- git config --get http.proxy
- // Just in case you need to you can also revoke the proxy settings
- git config --global --unset http.proxy
除了假设自己的服务,你也可以使用Git服务提供商提供的服务。最流行的Git服务提供网站是GitHub和Bitbucket。它们都提供了有限制的免费服务
可以通过 https://github.com/ 访问GitHub. GitHub上所有的公开仓库都是免费的。如果你想在上面使用私有的仓库,那么就需要付费给GitHub
GitHub需要你创建ssh的公钥私钥。生成一份Ubuntu的公钥私钥可以访问 ssh key creation in Ubuntu ,Windows环境可以访问msysgit ssh key generation .
在GitHub上创建一个账户和一个仓库以后。你会收到如何将你的项目上传到GitHUb的指南,其中的命令大致如下:
- Global setup:
- Set up git
- git config --global user.name "Your Name"
- git config --global user.email your.email@gmail.com
- Next steps:
- mkdir gitbook
- cd gitbook
- git init
- touch README
- git add README
- git commit -m 'first commit'
- git remote add origin git@github.com:vogella/gitbook.git
- git push -u origin master
- Existing Git Repo?
- cd existing_git_repo
- git remote add origin git@github.com:vogella/gitbook.git
- git push -u origin master
可以通过 https://bitbucket.org/ 访问Bitbucket. Bitbucket 提供了无限制了公共仓库和只能有五个人访问的私有仓库。如果你需要超过五个人访问私有仓库,就需要付费给Bitbucket
这个教程主要说明Git命令行的使用。完成了这个教程以后,你可能想要找到一个Git的图形工具
Git提供了两个图形工具。 gitk能够展示仓库的历史信息、git gui 让你可以通过编辑器来完成Git操作
Eclipse EGit 项目提供了Git与Eclipse的集成,在最新的Eclipse版本中可以找到
这个教程提供了Kindle版本
在提出问题之前,请先查看 vogella FAQ. 如果你有任何的问题或者是从文章中找到错误,那么可以使用www.vogella.com Google Group. 我自己写了一个简短的列表 how to create good questions 可能会对你有用.
EGit - Teamprovider for Eclipse
Video with Linus Torwalds on Git
http://code.google.com/p/msysgit/ Git on Windows
http://github.com/guides/git-cheat-sheet Git Cheat Sheets