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文件,也算一种方式吧

  • 相关阅读:
    Codeforces467C George and Job
    Codeforces205E Little Elephant and Furik and RubikLittle Elephant and Furik and Rubik
    Codeforce205C Little Elephant and Interval
    51nod1829 函数
    51nod1574 排列转换
    nowcoder35B 小AA的数列
    Codeforce893E Counting Arrays
    gym101612 Consonant Fencity
    CodeForces559C Gerald and Giant Chess
    CodeForces456D A Lot of Games
  • 原文地址:https://www.cnblogs.com/coding-my-life/p/4035183.html
Copyright © 2011-2022 走看看