在公司一直用的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. swift 点击button改变其内填充图片,达到选中的效果

    先看下效果: 点击后: 实现:在页面拖一个button,然后在所在页面声明其变量和一个点击事件 声明: @IBOutlet weak var BtnZiDong: UIButton! 点击事件函数: ...

  2. Hive集成HBase详解

    摘要 Hive提供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询 插入操作以及进行Join和Union等复杂查询   应用场景 1. 将ETL操作的数据存入HBase 2. HB ...

  3. UGUI 全方位了解

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

  4. 全响应跨设备的Zoomla!逐浪CMS2 x2.0正式公布

    2014年是中国互联网的重要一年,京东上市.聚美优品领衔创业风范,小米进军国际化.滴滴快的锋火争雄. 作为中国互联网的中间力量,Zoomla!逐浪软件团队坚守信念,始终以WEB开发和科研创新为己任,并 ...

  5. Ubuntu下访问SSH

    ssh程序分为有客户端程序openssh-client和服务端程序openssh-server.如果需要ssh登陆到别的电脑,需要安装openssh-client,该程序ubuntu是默认安装的.而如 ...

  6. py爬取英文文档学习单词

    最近开始看一些整本整本的英文典籍,虽然能看个大概,但是作为四级都没过的我来说还是有些吃力,总还有一部分很关键的单词影响我对句子的理解,因为看的是纸质的,所以查询也很不方便,于是想来个突击,我想把程序单 ...

  7. 第一次用IIS发布网站时遇到的两个问题

    1.  配置错误 说明: 在处理向该请求提供服务所需的配置文件时出错.请检查下面的特定错误详细信息并适当地修改配置文件. 分析器错误消息: 无法识别的属性“targetFramework”.请注意属性 ...

  8. WebApi2官网学习记录---OData中的查询

    EMD安全 查询语法是基于entity data model(EDM),不是基于底层的model类型,可以从EDM排除一个属性,这样这个属性在client就不能被查询了. 有两种方式可以从EDM中排除 ...

  9. (转).net开发者对android开发一周的学习体会

    春节期间,相对比较闲,上班时也没什么事情做.利用这一周的时间,简单的学习了一下移动方面的开发.主要是针对android,其实我对IOS更感兴趣 (因为我用iphone),苦于暂时没有苹果电脑,只能把它 ...

  10. Android SQLite API的使用(非原创)

    1.使用SQLite的API来进行数据库的添加.删除.修改.查询 package com.example.sqlitedatabase.test; import android.content.Con ...