准备学下git,才发现1年前就在电脑上装上git了。当时PySide的windows版尚未出来,用它下载了PySide的源码,后来因编译未果,竟然把这事忘了。
Git?
词典中解释: | git [ɡit] n.饭桶,无用的人 |
由此而来? | git: The stupid content tracker(傻瓜内容追踪器) |
简单点说: | Git 是一个由 Linus Torvalds 创建的源代码管理软件 |
官方说法: | Git 是一个快速、可扩展的分布式版本控制系统,它具有极为丰富的命令集, |
当我们讨论Git时,可能指代两种东西(后者是我们关心的):
-
内容追踪 :git探索?本质?(git plumbing)
- git-fetch-pack, git-send-pack, git-hash-object等命令
- ...
-
源代码管理器 :git外壳?(git porcelain)
- git commit 等命令 (git默认的外壳)
- 其他外壳: easy-git, yap, widgit, darcs-git.py 等
安装
- ubuntu下:
- 安装 git-core, gitk, git-gui 3个包
- windows下:
-
安装 msysgit 或 TortoiseGit(据说还不太完善,但很值得一试)
-
- 注:
-
gitk is a simple Tcl/Tk GUI for browsing history of Git repositories easily, distributed with Git.
-
git-gui is a tool for creating commits and managing branches. Written in Tcl/Tk. Stable versions are shipped with Core Git since version 1.5.
-
部分命令
最重要一个:
-
git help
创建仓库
本地创建 | git init |
克隆远端 | git clone |
stage 操作
添加 | git add |
查看状态 | git status |
查看差别 | git diff |
提交 | git commit |
unstage | git reset HEAD |
移除 | git rm |
分支(branch)操作
列出 | git branch |
创建 | git branch branchname |
切换 | git checkout branchname |
删除 | git branch -d branchname |
合并 | git merge branchname |
- 创建和切换可以合并成
git checkout -b branchname
远端仓库(remote repository)操作
管理 | git remote [add rm ...] |
拉取内容 ↓ | git fecth alias |
拉取内容(merge) ↓ | git pull alias |
推送内容 ↑ | git push alias branch |
- pull 相当于 fetch 和 merge 两条命令
几条与svn对比的命令:
查看diff | git diff | svn diff | less |
查看diff | git diff rev path | svn diff -rrev path |
应用patch | git apply | patch -p0 |
恢复 | git checkout path | svn revert path |
提交 | git commit -a | svn commit |
注意事项
- Google到的不少资料都是git 1.4之前的。所以要注意看官方的文档。
- git 的 master 分支 不同于 subversion 的 trunk!
It’s a common error to think of the master branch as being equivalent to Subversion’s trunk. However, a custom development branch is much closer in practice to the Subversion trunk, where experimental work is done.
- 不同于svn,分支不是单独的目录。需要自己跟踪各个分支?
- 每次commit时需要用户名和email。设置:
$ git config --global user.name 'Your Name' $ git config --global user.email you@somedomain.com
- git 有个以stage的概念,所有的东西提交之前需要加入到staged区域
-
可以使用 git commit -a 来避免繁琐的添加
-
注意 git reset HEAD 的含义。只是 unstage !
-
参考