在公司一直用的SVN做版本管理,倒也没什么问题。最近想自己在家写点东西,上班的时候又想偷偷地写。代码经常在两个地方同步,很是辛苦。反正写的只是一些用来学习测试的代码,干脆放到github上。

  1.登录https://github.com/注册一个帐号。

  2.到http://git-scm.com/download/下一个客户端,我的是ubuntu,到软件中心搜索一个git就好。下面也是以ubuntu为例来说明步骤。

  3.登录自己的github帐号,边看帮助边配置。

点击help,再点set up git。

在终端输入上面两个命令,设置你的用户名和邮箱地址。这是全局设置,以后的操作都会使用这一帐户。

  4.认证github帐号。上面我们只设置了帐号,肯定还要密码才能操作的。github的认证有两种,https和ssh。对于https,什么都不用做,但每次都要输入用户名和密码(或者是我不知道什么设置),麻烦。下面先说ssh认证。github的ssh要求用key来认证的。需要先在本地生成公钥。

  

在终端输入ssh-keygen -t rsa -C "注册邮箱地址",会提示你输入文件路径,linux下一般是 用户名/.ssh/git,文件名随意写,但小心把你其他ssh key覆盖了。如果你只输入文件名,则会在当前目录下生成密钥,然后再拷到 用户名/.ssh下,否则ssh找不到密钥,登录失败。输入文件名后会提示输入passphrase,我也不知道是什么东西,两次直接为空。然后就密钥就出来了。cat一下公钥(带.pub后缀那个),得到一串以ssh_rsa开头的字符,复制。

然后在github自己的帐户上点击设置(右上角那个齿轮),再点击SSH,Add SSH key.随便起一个名字,然后把刚刚复制的公钥粘贴上去,确定。

再现测试一下密钥是否可用,在终端输入ssh -T git@github.com,如果出现最后一行,则OK。

  5.所有设置都OK,现在需要建立一个仓库了。在自己的帐号上建立一个test_git仓库(不懂看教程了https://help.github.com/articles/create-a-repo/),反正什么都是空的也可以。

  6.在自己的电脑上建立一个目录为工作目录test。然后转到终端

cd test             #进入工作目录
git init #在当前目录下创建.git目录,表明这是一个工作目录
echo "*.o" >.gitignore #告诉git所有.o文件都不进行版本管理
echo "build" >> .gitignore #告诉git build目录不进行版本管理
echo "*~" >> .gitignore #~结束的文件是gedit之类的备份文件,不进行版本管理
git add -A #添加当前目录下的所有文件(.gitignore排除的不算)
git commit -m "hello git" #记录本次提交的log
git remote add test git@github.com:test_user/test_git.git #把用户test_user的仓库test_git在本地重新指定一个名字为test
git push test master #提交test到服务器master分支

其中,git remote add只起一个重命名的作用,如果你不觉得git@github.com:test_user/test_git.git名字长,那么不用这行,每次git push git@github.com:test_user/test_git.git master也是可以的。master是分支,不是很懂,不知道跟SVN的分支是否一样。

git@github.com:test_user/test_git.git是SSH的用法,意思是用帐户git(注意不是你的用户,git不给用户提供shell,“but GitHub does not provide shell access”)登录服务器github.com,登录目录为test_user/test_git.git。test_user才是你的用户名。

  7.如果用的是https认证方式,则把git@github.com:test_user/test_git.git改为https://github.com/test_user/test_git.git,然后你push的时候会提示你输入用户名和密码,其他都是一样的。

  8.如果出现

ERROR: Repository not found.
fatal: Could not read from remote repository. Please make sure you have the correct access rights
and the repository exists.

这样的错误,则是你未在github上先建立仓库,或仓库名错误。或者你的SSH登录失败。

  8.在Qt creator上使用git。Qt creator支持git的。在你做完上面的步骤后,Qt creator如果你的工程在git的工作目录内(即工作根目录一有.git文件夹,没有请按上面的步骤创建),Qt creator会在打开工程时自动识别到该工程受git版本控制,在工具里会多出一个Git选项。其他diff、commit等功能都正常。但尝试pull、push这些对远程服务器的操作时,则报:

fatal: 没有配置推送目标。
或通过命令行指定URL,或用下面命令配置一个远程版本库 git remote add <name> <url> 然后使用该远程版本库名执行推送 git push <name> The command "/usr/bin/git" terminated with exit code . : Executing in /home/xzc/code/game_server: /usr/bin/gitk -- LOGEngine/main.cpp
无法启动"/usr/bin/gitk".
无法启动"gitk".

嗯,这个错误我懂,就是Qt creator只调了一个指令git push,没有指定name和branch。于是,我赶紧到工具--选项--版本控制里面找参数。尼玛,百度了几个小时,找了半天,没有看到哪里可以在push、pull指令上加参数的地方。后来看到 无法启动"/usr/bin/gitk" ,我又不知道gitk是个什么东西,觉得Qt creator在失败后要启动它,想必是在这个软件上设置。于是sudo apt-get install gitk,没想到,什么鸟关系都没有。

  后来,在http://www.cnblogs.com/leaven/archive/2010/10/01/1839751.html终于找到相关的做法。在工作目录的.git/config下加

[branch "master"]
remote = test
merge = refs/heads/master

于是,在当前目录下,就可以直接使用git pull、git ush指令直接进行操作,不用再指定name和branch之类的。那Qt creator也能正常使用。其函数在http://862123204-qq-com.iteye.com/blog/1683315上有人解释为:

. 先把git的东西fetch到你本地然后merge后再push

$ git fetch

$ git merge

这2句命令等价于

$ git pull 

可是,这时候又出现了如下的问题:

上面出现的 [branch "master"]是需要明确(.git/config)如下的内容

[branch "master"]

    remote = origin

    merge = refs/heads/master

这等于告诉git2件事:

,当你处于master branch, 默认的remote就是origin。

,当你在master branch上使用git pull时,没有指定remote和branch,那么git就会采用默认的remote(也就是origin)来merge在master branch上所有的改变

如果不想或者不会编辑config文件的话,可以在bush上输入如下命令行:

$ git config branch.master.remote origin 

$ git config branch.master.merge refs/heads/master 

之后再重新git pull下。最后git push你的代码吧。

2014/10/20

  以重新看了一下,现在发现要实现git pull、git push这样带branch的操作,则需要设置trace信息。

git branch --set-upstream-to=test/master

上面用config的方式也可以,但那是直接设置.git/config文件,也算一种方式吧

初学github的更多相关文章

  1. GitHub Or Subversion

    上一次转载了介绍GitHub的博文点我,我想对于初学GitHub的同学们还是有不清楚的地方,毕竟有些概念的理解比较费力.我觉得作为一个对于配置库技术已经有一定基础的同学们,要学习GitHub,最快以及 ...

  2. Windows下解决github push failed (remote: Permission to userA/XXXX.git denied to userB.) 上传gitHub失败报错

    Windows环境下解决 github push failed (remote: Permission to userA/XXXX.git denied to userB.) · 初学GitHub的朋 ...

  3. GitHub----初学习(一)

    刚开始学习GitHub,在这借鉴一下别人的总结,http://youngxhui.github.io/2016/05/03/GitHub-for-Windows%E4%BD%BF%E7%94%A8%E ...

  4. Git for Windows 工具的使用(一)

    如果你还不知道什么是Git,只知道GitHub,但是还不会用,我想这个教程会帮助你. 前言 鉴于网上目前的教材都太落后,GitHub for Windows已经更新了多个版本,好多界面都发生了变化,所 ...

  5. 搜刮一些开源项目的APP

    iOS完整App资源收集 <iOS完整app资源收集>  <GitHub 上有哪些完整的 iOS-App 源码值得参考?> <GitHub 上有哪些完整的 iOS-App ...

  6. 初学git:用git bash往github push代码

    对于我来说,最开始使用github主要是为了使用它的pages功能展示demo.其实这些都是用Github for Windows push上去的,图形化界面的客户端使用确实简单,但是逼格不够,好吧其 ...

  7. github 自学文档 希望可以给初学的人一些帮助

    一 .git的安装 windows下面的安装:https://git-for-windows.github.io  从这里下载完全无脑安装. 安装完成后,在开始菜单里找到"Git" ...

  8. 初学Git和Github

    一开始看到老师的作业,出于好奇打开看了一下教程链接,一脸懵逼.What is this???然后慢慢了解,自己百度琢磨这个陌生的git,Git是一款免费.开源的分布式版本控制系统.Github是一个代 ...

  9. Github上安卓榜排名第2的程序员教你如何学习【转载,侵删】

    来自:峰瑞资本(微信号:freesvc)文章作者:代码家(微信 ID:daimajia_share) 软件早已吞噬整个世界,程序员是关键角色.过去 40 年中,许多伟大的公司都由程序员缔造,比如比尔· ...

随机推荐

  1. python批量下载

    # -*- coding: utf-8 -*-__author__ = 'Administrator'from PyQt4.Qt import *from PyQt4.QtCore import *f ...

  2. UGUI 全方位了解

    随着 unity3d 4.6 ~ 5.x + 新 UI 系统最终与大家见面了.这篇文章将不会介绍怎样使用button.滚动栏之类的UI控件.这些内容能够參考Unity Manual:这篇文章的重点是. ...

  3. Kerberos-KDC

    Kerberos提供一种较好的解决方案,它是由MIT发明的,Kerberos建立了一个安全的.可信任的密钥分发中心(KDC, Key Distribution Center).Kerberos是一种认 ...

  4. JavaScript 对象 - 与属性的相关知识

    function inherit(p){ if(p == null) throw TypeError(); if(Object.create) return Object.create(p); var ...

  5. (转).net程序员转战android第三篇---登录模块之静态登录

    这一篇我将分2个部分记录登录界面,第一部分是静态登录, 这部分将如何从界面布局.控件使用.文件关系.数据验证.登陆实现等5小块记录. 第二部分是动态登录,这块会基于上面的4小块,在数据验证不是静态数据 ...

  6. js过滤

    datagrid:                loadFilter: function (data) {                    return loadFilter(data);   ...

  7. css导航条

    #nav ul { display: none; position: absolute; padding-top: 0px;} #nav li:hover ul { display: block;}

  8. Paros抓包工具

    http://www.hackbase.com/article-1593-1.html http://www.baidu.com/s?ie=utf-8&f=3&rsv_bp=1& ...

  9. 0301——UItableView

    - (void)viewDidLoad { [super viewDidLoad]; self.myTableView = [[UITableView alloc]initWithFrame:CGRe ...

  10. cellForRowAtIndexPath方法不执行的那些坑

    今天用到了uitableview,是xib形式的.不过cellForRowAtIndexPath方法死活不执行,检查了返回的row数量,section的数量,数据源,代理都没问题,不过cellForR ...