zoukankan      html  css  js  c++  java
  • 初学github

      在公司一直用的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 128.
    
    16:52 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上有人解释为:

    2. 先把git的东西fetch到你本地然后merge后再push
    
    $ git fetch
    
    $ git merge
    
    这2句命令等价于
    
    $ git pull 
    
    可是,这时候又出现了如下的问题:
    
    上面出现的 [branch "master"]是需要明确(.git/config)如下的内容
    
    [branch "master"]
    
        remote = origin
    
        merge = refs/heads/master
    
    这等于告诉git2件事:
    
    1,当你处于master branch, 默认的remote就是origin。
    
    2,当你在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文件,也算一种方式吧

  • 相关阅读:
    PDA智能程序访问WebService,报告“未能建立与网络的连接”
    VS2008中开发智能设备程序的一些总结收藏
    Error: The INF file contains Unicode characters that could not be converted correctly
    在vs2008工程中制作cab包
    linux专题三之如何悄悄破解root密码(以redhat7.2x64为例)
    linux专题一之文件描述符、重定向、管道符、tee命令
    linux的计划
    如何安装RHEL7.2x64 即红帽7.2虚拟机?
    快速排序及查找第K个大的数。
    来来来,做道题,一起防老年痴呆
  • 原文地址:https://www.cnblogs.com/coding-my-life/p/4035183.html
Copyright © 2011-2022 走看看