Skip to content

Ubuntu环境如何上传项目到GitHub网站? #13

Description

@upcAutoLang

Ubuntu环境如何上传项目到GitHub网站?

之前笔者写了一篇《CMake学习笔记(三)——以笔者的Robosub竞赛为例》的博客。博客中笔者以自己的项目为例,解释整个项目cmake流程,但是当时笔者并没有贴出自己的项目源码。
GitHub 是一个面向开源及私有软件项目的托管平台,注册用户都是来自世界各地的大神级别人物。笔者作为小渣渣也想在里面学习学习,所以就把项目源码托管在GitHub上吧~
由于写这篇博客时,笔者已经申请了账号,且已经上传了几个项目尝试。所以博客中也许会有某些操作略过,但笔者会给出其他参考链接。

笔者的工作环境

  • 操作系统:Ubuntu 14.04 LTS 64位

一. 注册账号

首先进入GitHub的官网,注册GitHub账户。
GitHub官网网址:https://github.com/

笔者已经注册了一个GitHub账号,且注册流程十分简单,所以不再赘述。笔者的GitHub主界面如下所示:
这里写图片描述

二. 设置SSH Key

由于本地的Git仓库与GitHub网站仓库之间的传输是通过SSH加密的,所以这时候需要设置SSH keys。
笔者本来有两个SSH Keys,但为了写博客就把它删了,准备再重新设置一个SSH Key。
设置SSH Key的参考网址:
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/001374385852170d9c7adf13c30429b9660d0eb689dd43a000

1. 创建SSH Key

首先我们在用户主目录下看是否存在.ssh目录。以笔者为例,笔者使用的是Ubuntu系统,当前用户的主目录是/home/grq,所以此时我们需要查找路径/home/grq/.ssh是否存在。
如果存在,查看是否存在id_rsaid_rsa.pub两个文件是否存在。如果也存在,就可以调到下一步;
如果不存在,便打开终端,输入自己的邮箱地址,创建SSH Key。

ssh-keygen -t rsa -C "youremail@example.com"

其中,"youremail@example.com"是你的邮件地址,-C的字母为大写。后面可以一直回车。中间会让你输入密码,但整个SSH Key对笔者来说保密意义不大,所以不需要设置。SSH Key创建成功后,在笔者的主目录下就会生成/home/grq/.ssh文件夹,里面也会生成文件id_rsaid_rsa.pub,它们是SSH Key的秘钥对。其中id_rsa是私钥,不能泄露,id_rsa.pub是公钥,可以告诉其他人。
终端设置完成后的界面如图所示:
这里写图片描述

2. 在GitHub端设置SSH Key

登录GitHub,点击右上角头像,Settings -> Personal settings -> SSH and GPG keys。在SSH Keys标签右方点击New SSH Key。
弹出两个文本框。其中的Title,可以随意命名。笔者此处随便命名为grq-Ubuntu。
另一个Key文本框,需要输入刚刚生成的id_rsa.pub文件中的内容。粘贴后点击Add SSH Key,即可生成SSH Key。如图所示:
这里写图片描述

三. 上传项目

笔者查阅资料,有网友得出总结,可以将git分为四部分:一部分是自己的本机文件,一部分是缓存区,一个是本地仓库,一个是服务器仓库。当用户在本机修改了文件后,就应该使用git add xx指令将修改保存到缓存区,然后再用git commit yy指令将推送从缓存区修改到本地仓库中,最后使用git push将本地仓库中的修改推送到服务器仓库中。
下面按照流程讲解。

1. 准备上传

首先,我们需要确定的是Ubuntu中是否安装Git。
打开终端,输入指令git,如果返回了一大串提示信息,那么就已经安装了。
如果没有安装,就输入以下指令:

sudo apt-get install git

安装完毕后,终端进入我们需要上传项目所在的文件夹。使用git的初始化命令:

git init

这个命令可以把当前目录变成git可以管理的仓库。
现在我们就可以进行git操作将项目上传到GitHub了。

2. 添加需要上传的文件

上传之前,我们需要添加上传的文件。这里使用到的指令是:

git add file

其中,file是我们想要添加的文件。这里笔者想要将整个文件夹内容都添加进去,所以此处笔者输入的指令如下:

git add ./

3. 检查当前git状态

然后我们可以使用git指令,查看当前git的状态。指令如下:

git status

该指令可以查看当前的分支以及添加文件的情况。
由于笔者之前已经上传过该项目,此次属于更新该项目,所以输入该指令后的状态如下图所示:
这里写图片描述
现在可知,笔者当前的信息就是在master分支上。

4. commit推送

笔者此处使用指令,将缓存区的修改提交到本地仓库。笔者的指令如下:

git commit -m "Update Readme Files(Version of Chinese & English)"

-m后的内容是笔者添加的描述。由于笔者这次是更新该仓库,更新内容是中文与英文的Readme文件,所以就写了上述的备注。

如果输入commit指令后,出现错误:

** Please tell me who you are.
Run
  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: unable to auto-detect email address (got 'XXX@YYY.(none)')

这时候的解决办法是,在进行git add ./操作的路径中,实际上已经生成了一个隐藏的.git文件夹。在该路径下输入指令cd ./.git便进入.git文件夹,使用gedit或vim打开文件config,在文件末尾加入内容:

[user]
 email = your email
 name = your name

里面的your email, your name随便填上就行,笔者是直接填的GitHub账号中的Email和用户名。填好后如图所示:
这里写图片描述

这时候再进行commit指令,应该就可以成功了。完成后就可以等待提交了。

5. 添加文件到远程库

上传文件到仓库之前,我们需要拥有一个仓库。由于笔者这里已经构建了仓库,所以只给出在自己的GitHub账号下构建仓库的教程链接如下:
http://www.cnblogs.com/keZhenxu94/p/5288488.html
构建仓库结束后,我们需要得到该仓库的SSH Key才能向其中上传内容。进入刚才新建的仓库,点击Clone or download,在弹出的Clone with SSH框中点击小按钮Copy to clipboard。如下图所示:
这里写图片描述

首先我们应该添加一个远程仓库,命名为origin,这样随后才可以添加文件到远程库中。指令如下:

git remote add origin git@github.com:upcAutoLang/Framework-for-NACIT2017.git

如果此时出现错误:fatal: remote origin already exists. 这时候说明远程仓库已经存在。这时候需要先删除origin仓库,然后再重新添加该远程仓库。指令如下:

git remote rm origin
git remote add origin git@github.com:upcAutoLang/Framework-for-NACIT2017.git

这时候应该就应该不会报错了。然后我们添加文件到远程库。笔者使用的指令如下:

git remote set-url origin git@github.com:upcAutoLang/Framework-for-NACIT2017.git

其中,git@github.com:upcAutoLang/Framework-for-NACIT2017.git即为笔者在github服务器仓库中复制的内容。
然后,笔者使用push指令进行上传。如果该仓库是第一次进行push,则指令如下:

git push origin master

但笔者之前已经传输过,此处只是更新,所以只需输入:

git push

之后会弹出问题,询问是否继续?输入yes回车即可。如图所示:
这里写图片描述

push结束后,在GitHub端的对应仓库上刷新一下,内容就改变了。说明项目内容已经上传成功了~
这里写图片描述

6. 某些push错误的情况

有时候对新建的仓库进行push操作,会出现上传失败的情况。
通常出现这种情况的原因,是新建的仓库往往会有一个文件Readme.md文件,而本地仓库中没有这个文件,也就是说本地仓库与服务器端仓库没有实现同步。所以将这个Readme.md文件clone到本地,然后再commit提交,应该就没有问题了。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions