1. GIT
相比CVS/SVN,Git 的优势:
-支持离线开发,离线Repository
-强大的分支功能,适合多个独立开发者协作
-速度块
中文版Git使用指南点击这里。
2. GitHub
GitHub是一个托管Git (开源或闭源)项目的网站,闭源收费,最低7$/月起,免费的300G空间。价格表如下:
使用GitHub步骤:
1、申请GitHub帐户 xxx ,创建名为new-project的新Repository
2、安装Git客户端(Linux)
#yum install git git-gui
3、生成密钥对,这样项目可以push到 GitHub上
#ssh-keygen -t rsa -C "xxx@gmail.com"
4、将.ssh/id_rsa.pub拷贝到GitHub网站
5、为了方便,设置ssh不输入口令
# eval `ssh-agent`
# ssh-add
(输入passphrase)
6、测试是否能联通GitHub
#ssh git@github.com
如果配置正确,显示
ERROR: Hi xxx! You've successfully authenticated, butGitHub does not provide shell access
Connection to github.com closed.
7、设置Git全局用户配置
# git config --global user.name "xxx"
# git config --global user.email xxx@gmail.com
8、创建本地新项目工作树
# mkdir new-project
# cd new-project
# git init
# touch README
# git add README
# git commit -m 'first commit'
定义远程服务器别名origin
# git remote add origingit@github.com:xxx/new-project.git
本地和远程合并,本地默认分支为master
# git push origin master
GitHub网站上就可以看见了,http://github.com/xxx/new-project
9. 更新文件
# vi README
自动commit更改文件
# git commit -a
更新至远程
# git push origin master
10. 创建和合并分支
#git branch 显示当前分支是master
#git branch new-feature 创建分支
# git checkout new-feature 切换到新分支
# vi page_cache.inc.php
# git add page_cache.inc.php
Commit 到本地GIT
# git commit -a -m "added initial version of pagecache"
合并到远程服务器
# git push origin new-feature
如果new-feature分支成熟了,觉得有必要合并进master
#git checkout master
#git merge new-feature
#git branch
#git push
则master中也合并了new-feature 的代码
再登录到GitHub可以看见"Switch Branches"下的分支选项:
GitHub还有一个很实用的功能,查看开发进程网络图(Network):
复制一个git项目
1. git clone git://github.com/luozhaoyu/test.git
更新项目
1. git pull
回滚刚才的操作
回滚有两种方法,一种是留痕迹的git revert
1. git revert cc3a9d3a5820b16bca3c1761efb5885b90371e94
这是通过又一次的commit中和之前不要的commit达到回滚的目的。所以revert后面跟着的commit-ish就是需要被回滚的那次commit的值
另一种是不留痕迹的,也就是时光机
1. git reset d5bb1731bf32fb62dc7eedc573da41fa31e27151 --hard
直接回到commit-ish那时的状态,之后发生了什么都不会出现在commit log里
永久删除不小心commit的文件
https://help.github.com/articles/remove-sensitive-data
1. git filter-branch --index-filter 'git rm --cached --ignore-unmatch FOLDER/*' --prune-empty --tag-name-filter cat -- --all
2. git push origin master --force
3. # 完成上一步就以及删除了文件历史,注意要往每一个分支push,可以使用--all --tags
4. # 下面是在本地删除多余文件
5. rm -rf .git/refs/original/
6. git reflog expire --expire=now --all
7. git gc --prune=now
8. git gc --aggressive --prune=now