如何使用git.oschina.net

0、准备工作

* 在官网下载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

1、使用开源中国的git托管平台

* 在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

2、使用HTTPS地址

添加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

如何使用git.oschina.net_第1张图片

本机为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地址得了。

3、使用SSH地址

3.1、SSH key 可以让你在你的电脑和 Git @ OSC 之间建立安全的加密连接。

在(官方帮助)中,按照“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。


3.2、push本地更改到远端(至此一个简单的工作流就完成啦)

先初始化;

再在本地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.git

Administrator@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)表示“计算机用户名@计算机名”。


以下都是补充和个人备忘

4、ssh地址的一个格式细节

冒号后面有误斜杠的对比

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.


5、操作备忘(每句命令都不需要分号)

* 创建版本库并初始化: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/xiaoneinewProject

Administrator@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:

如何使用git.oschina.net_第2张图片

你可能感兴趣的:(如何使用git.oschina.net)