* 在官网下载git {!安装之后开始菜单会出现Git Bush和Git Gui};
$ git --version
git version 1.9.4.msysgit.1
{!本例中使用Git Bush命令行模式}
* 官方帮助
(http://git.oschina.net/oschina/git-osc/wikis/%E5%B8%AE%E5%8A%A9)
* git简易教程
(http://www.bootcss.com/p/git-guide/)
* git内部原理{!可以先不看}
(http://iissnan.com/progit/html/zh/ch9_0.html)
* git超详细图文(包括安装教程)
(http://blog.csdn.net/shulianghan/article/details/18812279#t3)
* 终极教程
www.liaoxuefeng.com
其他资料
* 在Eclipse下使用egit
http://my.oschina.net/songxinqiang/blog/194203
* GUI使用
http://hi.baidu.com/mvp_xuan/item/789262104e758f3bb93180d2
* 在http://git.oschina.net注册帐号新建项目xiaoneinewProject
刚建立的时候该项目为空,所以首页会提示与自己项目和邮箱名称对应的三步简易教程:
Git 全局设置;
创建git仓库;
已有项目?
“Git 全局设置”是设置自己的用户名和邮箱;
git config --global user.name "lawlietfans" git config --global user.email "[email protected]"
“创建git仓库”的代码如下:
cd xiaoneinewProject git init git remote add origin 仓库地址 git push -u origin master
“已有项目”相比上面就省略git init这一步
* 注意
仓库地址有两种:
对于xiaoneinewProject这个项目
其HTTPS地址:https://git.oschina.net/snifferapache/xiaoneinewProject.git
其SSH地址:[email protected]:snifferapache/xiaoneinewProject.git
如果在写https地址,那么以后将本地代码push到远端的时候需要用户名密码,比较麻烦;
所以本机选择ssh地址,这样的话首先需要配置SSH Key;
添加origin的https地址之后,push的时候出现如下错误:
fatal: unable to access 'https://git.oschina.net/xxx.git/': Protocol https not supported or disabled in libcurl
按照(http://www.oschina.net/question/1424919_148309)
本机为window7 32位操作系统,在(C:\Windows\System32)下找到libcurl.dll,删除之后再次push的时候出现以下问题:
$ git push origin master
remote: Not Found
fatal: repository 'https://git.oschina.net/snifferpache/xxx.git/' not found
鉴于问题诡异,读者直接使用ssh地址得了。
在(官方帮助)中,按照“SSH Keys”这一栏操作就会在用户目录下生成.ssh文件夹(我的是C:\Users\von\.ssh);
将id_rsa.pub用记事本打开,将其内容复制到http://git.oschina.net/keys建立的新key即可。
测试成功效果如下(我用户名是lawlietfans):
Administrator@FENG /f/xiaoneinewProject (master)
$ ssh -T [email protected]
Welcome to Git@OSC, lawlietfans!
{!如果直接复制shell里面显示的id_rsa.pub内容,则会出现以下错误
添加git@osc公钥提示“Fingerprint 已经被使用 Fingerprint 生成失败!”
}
* 注意
首先Git Gui和Git Bash各有缺点,前者直观方便理解。Gui中有一个ssh生成功能,点击生成的密钥ssh1(保持默认,没有设置邮箱,无密码),接着在命令行下使用帮助页面的ssh-keygen再次生成了一个ssh2(包含邮箱参数,无密码);
事实上,Git Gui的密钥只能生成一次(即ssh1),但我将ssh2上传到了oschina,导致密钥不匹配,使用ssh -T [email protected]测试失败。
如果不确定的话就把把ssh1和ssh2都保存到oschina。
先初始化;
再在本地xiaoneinewProject文件夹中新建一个MyGitTest.cpp和ReadMe.txt;
{!本地操作基本流程:
修改->add->commit;
暂存、提交两步并做一步只要在使用$git commit时加一个-a选项即可。}
接着git push命令会将这两个文件上传到remote端;
【初始化略】
Administrator@FENG /G/git/xiaoneinewProject (master)
$ git remote add origin [email protected]:snifferapache/xiaoneinewProject.gitAdministrator@FENG /G/git/xiaoneinewProject(master)
$ git push -u origin master
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 625 bytes | 0 bytes/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To [email protected]:snifferapache/xiaoneinewProject.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
接着打开该项目的托管地址(http://git.oschina.net/snifferapache/xiaoneinewProject.git)便可以看到这两个文件;
其中(Administrator@FENG)表示“计算机用户名@计算机名”。
以下都是补充和个人备忘
冒号后面有误斜杠的对比
Administrator@FENG /G/git/test
$ git clone [email protected]:/snifferapache/hellogit.git
Cloning into 'hellogit'...
ssh: connect to host git.oschina.net port 22: Bad file number
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.Administrator@FENG /G/git/test
$ git clone [email protected]:snifferapache/hellogit.git
Cloning into 'hellogit'...
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (5/5), done.R
remote: Total 7 (delta 1), reused 0 (delta 0)
Receiving objects: 100% (7/7), 850 bytes | 0 bytes/s, done.
Resolving deltas: 100% (1/1), done.
Checking connectivity... done.
* 创建版本库并初始化:mkdir xiaoneinew;git init;
* 本地或远端的克隆版本:git clone /path/to/repository;git clone username@host:/path/to/repository;
* 连接到远程服务器:git remote add origin <server>;
* 添加、提交和推送更改:git add filename;git commit -m "add filename";git push origin master【master为默认分支】;
* 掌握工作区的状态、查看readme.txt的具体变动:git status;git diff readme.txt;
* 查看历史记录、回退到上个版本:git log或者git log --pretty=oneline;git reset --hard HEAD^或者git reset --hard 版本commit id前几位;
* 查看readme.txt内容、查看每一次变动命令:cat readme.txt;git reflog;
**为什么Git比其他版本控制系统设计得优秀,因为Git跟踪并管理的是修改,而非文件**
* 查看readme.txt的更改情况、丢弃工作区的修改:git diff HEAD -- readme.txt;git checkout -- file;
* 创建文件、删除文件:touch test.txt;git rm test.txt;git commit -m "remove test.txt"
* 关联我的远程库:git remote add origin [email protected]:snifferapache/xiaoneinewProject.git;
Administrator@FENG /g/git/xiaoneinewProject (master)
$ git remote add origin [email protected]:snifferapache/xiaoneinewProjectAdministrator@FENG /g/git/xiaoneinewProject (master)
$ git push -u origin master
Counting objects: 20, done.
……
【由于远程库是空的,我们第一次推送master分支时,加上了-u参数,Git不但会把本地的master分支内容推送的远程新的master分支,还会把本地的master分支和远程的master分支关联起来,在以后的推送或者拉取时就可以简化命令。】
* 新建并切换到分支dev、查看分支、合并某分支到当前分支:git checkout -b dev;git branch;git merge name;
* 查看分支合并图:git log --graph;
* 禁用fast forword的合并:git merge --no-ff -m "merge with no-ff" dev;
* 储存当前工作现场、恢复、恢复指定stash:git stash;git stash apply或者git stash pop;git stash apply stash@{0};
* 删除分支、强删分支:git branch -d name;git branch -D name;
* 查看远程库信息:git remote [-v];
* 创建远程origin的分支dev到本地:git checkout -b dev origin/dev;
* 指定本地dev分支与远程origin/dev分支的链接:git branch --set-upstream dev origin/dev;
* 打一个标签(给某版本打标签)、查看所有标签、指定标签信息:git tag tagname【git tag v0.9 6224937
】;git tag;-a tagname -m "blablabla...";
* 删除标签、推送标签v1.0到远端(所有标签):git tag -d v0.1;git push origin v1.0【git push origin --tags】;
* 删除远端标签: git push origin :refs/tags/v0.9;
* 在github上:先fork别人项目到自己仓库再clone到本地;
* 让git显示颜色:git config --global color.ui true;
* 忽略某些文件时,需要编写.gitignore,.gitignore文件本身要放到版本库里,并且可以对.gitignore做版本管理;
* 配置别名举例:git config --global alias.st status;
* Git Cheat Sheet: