使用git推送代码到开源中国以及IDEA环境下使用git

使用git推送代码到开源中国以及IDEA环境下使用git

在学习Java的过程中我们会使用到git这个工具来将我们本周所编写的代码上传到开源中国进行代码托管,而在使用git的时候有很多的同学由于不会操作而只能在git@osc上新建项目后再新建文件并把自己的代码一个一个的复制粘贴上去。这样的操作方式不仅耗时耗力,也违背了利用git让学习更加轻松的目的。

我认为,出现不会操作的主要是因为:

1. git对于我们来说是一个以前没有接触过的比较新颖的范围;
2. git的教程比较分散,没有一个完整全面通俗易懂的图文讲解对于学习一个较为新颖的事物是一种非常难受的体验;
3. 对于命令行窗口、命令指令操作不习惯。

所以接下来我们会从头开始来细讲一下关于git的一些常用操作以及如何在IDEA环境下使用git

概况

1. 注册git@osc
2. 如何在 git@osc 上新建项目
3. Windows 下安装 git
4. 使用 git 向 git@osc 推送代码
5. 使用 git 时常见的一些问题以及解决方式
6. 在 IDEA 中使用 git

注册 git@osc

打开Git@OSC,单击 加入Git@OSC 按钮,如下图:

如下图所示设置属于你的个人信息,

点击 注册 按钮之后我们便可以在 git@osc 上进行代码托管了

如何在 git@osc 上新建项目

在 git@osc 上新建项目,设置如下图所示

这样一来我们便拥有了一个新的项目,在这个时候其实我们已经能够在项目中进行代码托管了,只是因为没有安装git,托管的方式只能是最简单但是最没有效率的复制粘贴,所以我们要有下面的这一步 在Windows下安装git

Windows下安装git

下载

git最新版本官网下载地址点这里→git最新版本官网下载地址

下载界面如下图所示,根据自己电脑的配置进行下载安装包即可。

安装

下载完成后根据自己的下载保存位置打开如下图所示安装包

按照下列图片设置安装即可

安装过程中,询问是否修改环境变量,选择“Use Git Bash Only”. 即只在msysGit提供的Shell

(NOTE: 这个步骤最好选择第二项“Use Git from the Windows Command Prompt”, 这样在Windows的命令行cmd中也可以运行git命令了。这样会对以后的一些操作带来方便)

完成安装后,打开命令行模式,输入git指令,即可使用

使用 git 向 git@osc 推送代码

接下来的内容也是我们这一篇的主要内容,会涉及到如题目所说的如何使用git将代码托管到开源中国上。而在我们进行托管代码之前需要做如下面列表所述的几个准备工作。

1. 首先你需要有一个开源中国的账号
2. 你要在git@osc里新建了一个项目
3. 你电脑上已经按上面的情况安装了git
4. 在命令行模式下给git配置你的用户名和邮箱
5. 你需要有一个ssh公钥
6. 你已经写好了一个需要上传的项目

上述的6条准备工作中在前面我们已经讲述了前三条,所以我们现在从第4条开始说起。

在命令行模式下给git配置你的用户名和邮箱

有人可能会问,我已经把git下载好了,而且我在 git@osc 上已经输入过我的用户名和邮箱了为什么还需要这一步?

之所以需要这一步是因为你虽然在 git@osc 上注册过账号,输入过你的用户名和邮箱,但你本地的git软件并不知道这些信息,如果你跳过这一步直接进行后面的操作例如直接向git本地仓库托管代码,git就会说,诶你谁啊你?为什么要往我这里放东西?所以,在命令行模式下给git配置你的用户名和邮箱实际上就相当于你在告诉git你是谁,然后宣布你拥有在git那里放东西的权利。

那么我们现在就来说一说如何在命令行模式下给git配置用户名和邮箱。

打开命令行模式,输入如下指令

git config --global user.name "你的用户名" 
git config --global user.email "你的邮箱地址"

这些配置都会存放在用户所在目录下的.gitconfig文件中,比如(C:\Users\Administrator.gitconfig,这个要看实际的路径,也有可能在C:\Windows\System32\config\systemprofile目录下),可以用记事本打开查看内容

ssh公钥

首先我们还是来说一说ssh公钥的作用是什么好了。

如果说利用git向 git@osc 上传代码是一个投递快递的过程,那么git在这个过程中担当的就是快递公司的角色, git@osc 上的远程仓库就是收件人,本地仓库是就是寄件人,而ssh公钥就是快递单,用于核对寄件人和收件人信息,从而保证投递无误。

接下来就是如何设置ssh公钥

首先通过自己的git安装路径找打git-bash.exe,双击运行,并在弹出的命令窗口中输入以下指令

ssh-keygen -t rsa -C "youreamil@xxx.com"

一路回车,如下图所示该指令会在你的当前用户文件夹下生成一个名为.ssh的文件夹,用记事本打开该文件夹中名为id_rsa.pub的文件并复制里面的全部内容

打开http://git.oschina.net/keys页面,在该页面中可添加公钥,标题可以随便填,公钥就是刚才复制过的内容,点击保存即可

ssh公钥上传成功后的界面会像下面这样

拥有一个需要上传的项目

这一个我觉得没必要多说了,因为利用git上传代码的前提就是有需要上传的代码。

使用git向 git@osc 托管代码

既然我们都已经完成了准备工作,那么接下来就应该到了我们的重点内容,如何使用git向 git@osc 托管代码

值得一提的是,在所有的六项准备工作中,前五项内容是只需要完成一遍就再也不用重复操作的内容,也就是说,如果说我在完成了准备工作,并已经完成一次成功的代码托管,那么从第二次代码托管开始,我只需要从第六项操作开始完成即可,不过前面我也说了,总不可能在没有需要托管的代码的条件下使用代码托管。

简单来说,使用git托管代码可细分为以下几个步骤,

1. 与git@osc建立连接
2. 将需要托管的项目归入git的管理范围
3. 将需要托管的文件添加到本地仓库
4. 将本地仓库中的代码推送到远程仓库中去

首先,我们找到需要上传项目文件的位置,点击右键-Git Bash Here,这样便会弹出和前面生成ssh公钥时一样的命令窗口。

首先我们执行第一步,与 git@osc 建立连接,在命令窗口输入以下指令

ssh -T git@git.oschina.net

窗口会提醒你输入用户名和密码,用户名密码就是你之前所申请的 git@osc 的用户名与密码,接着会提示输入yes/no,输入yes后回车,显示出welcome to Git@osc,your username!说明连接成功,此处需要注意的是,若第一次连接成功之后,在第二次连接 git@osc 时就不需要再输入用户名和密码。连接成功之后如下所示

完成第一步之后,我们已经与 git@osc 建立连接,接下来我们执行第二步,将需要托管的项目归入git的管理范围。

不过在那之前,如果你是使用的Windows系统,那么我们应先输入

git config --global core.autocrlf false指令

注意:该条指令只需要第一次执行,从第二次起便不需要再执行

然后在刚才的窗口继续输入指令

git init

如下图所示,可以看到会在该目录下生成一个.git的隐藏目录,这说明该目录已经归入git进行管理了

接下来我们需要在git窗口中继续输入

git add .

把该目录下的所有文件全部提交到缓冲区

如果这一步之前执行过git config --global core.autocrlf false,那么这一步不会出现提示

如果未执行,那么会出现下图所示的warning提示,具体原因在后面有解释

使用git commit指令可以将缓冲区中的文件添加到本地仓库。

先说明一下git addgit commit指令, git add 添加需要提交的文件,可多次使用,所以在使用的时候我们既可以使用git add .将该目录下的所有文件添加到缓冲区,也可以像git add file1.txt这样将file1.txt文件添加到缓冲区。

git commit是将缓冲区的文件添加到本地仓库,所以commit命令一次可以提交多个文件,所以我们也有这样的用法

git add file1.txt
git add file2.txt
git add file3.txt
git commit -m "add 3 files."

git commit -m参数后面跟字符串,告诉Git本次修改的说明信息。我们经常使用git commit -m "提交的描述信息"也是因为我们应该在每次提交的时候注明说明信息。

接下来我们使用git commit指令,同样,如果之前没有执行过git config --global core.autocrlf false,出现的提示会如下图所示,如果执行过,那么出现的提示便不会出现提示中间部分的warning。

这样我们已经将该项目目录下的所有文件添加到了git的本地仓库中,这个时候的代码托管只能算是完成了一半,因为这只是相当于将你想要寄出的快递打好包,但是却还没有寄出去,所以我们应该继续输入如下指令

git remote add origin http://git.oschina.net/你的用户名/你的项目名.git

上面所述的用户名和项目名都是在 git@osc 中的用户名和项目名,注意别把自己弄晕了。因为在实践的过程中很多同学都因为对这一步不了解而导致之后的git push出现错误,所以我在这里解释一下上面指令中origin后面所跟的网址就是你的项目地址,而所谓项目地址就是在你的项目网址后面加上.git。

例如在我要将本地仓库与下图中的项目建立连接,我应该输入上面所写的git remote add origin http://git.oschina.net/你的用户名/你的项目名.git的指令,origin后跟的地址就应该是下图页面下对应的网址再加上.git即可,对应的你也可以在图中http|ssh右侧的文本栏复制项目地址,在git bash界面中右键粘贴即可

注意,这一步完成之后是不会有提示出现的

接着便执行git push origin master指令即可,执行之后会提示输入你的用户名和密码,用户名可能因为你的设置原因,与网站昵称不同,所以不知道自己用户名是什么的时候可以看一眼自己的项目网址,git.oschina.net斜杠内跟的就是你的用户名,密码部分在输入时是不会有显示的。完成push后的截图如下

看见上面的提示后打开刚刚上传的项目,我们就可以看见我们上传的文件了

使用 git 时常见的一些问题以及解决方式

运行git add . 出现 warning: LF will be replaced by CRLF

在之前我们提到过,如果说你使用的是Windows系统,在使用git init指令之前就需要先执行一次git config --global core.autocrlf false指令,如果不执行该条指令,直接执行git init指令也并不会出现错误,但在接下来直接执行git add .时,则会出现如下图所示的提示,这是因为linux中的换行符【LF】与Windows中的换行符【CRLF】不一样造成,需要进行转换而造成的,详细的见参考资料中windows使用git时出现:warning: LF will be replaced by CRLF

如果在执行git config --global core.autocrlf false指令之前你已经执行过了git init指令,则应执行rm -rf .git后再执行git config --global core.autocrlf false

之后再次执行

git init
git add .

即可

上传项目应拼写错误而出现无法上传项目

在执行git remote add origin http://git.oschina.net/你的用户名/你的项目名.git因为origin后的项目名较长,难免会出现错误而导致无法上传,但是在输入过正确的项目名后又会发现无法执行,这个时候我们有两种解决方法,

第一,打开.git下的config文件,把如下内容删掉

[remote "origin"]
    url = http://git.oschina.net/whaon/none.git
    fetch = +refs/heads/*:refs/remotes/origin/*

然后在git命令行中输入正确的项目名即可

第二,执行git remote rm origin

再执行git remote add origin http://git.oschina.net/你的用户名/你的项目名.git即可

执行git push origin master时出现提示无法上传

这里最有可能出现的是fetch-firstnon-first-forward

fetch-first的错误提示如下

而non-first-forward的错误提示是像下面这张图中的一样

产生的原因不同,但基本上都是因为在远程仓库中已经拥有一部分文件,与你本地上传的代码并不完全一致而导致的,基本解决方法是

git pull origin master
git push origin master

如果先pull再push也无效,在确保远程仓库中的所有代码在本地仓库中都存在时,可以使用强推指令,使本地代码强行覆盖远程仓库文件,强推指令为git push -f origin master

使用gitignore忽略增加指定文件

在我们上传代码的时候需要注意,有些文件是不需要进行托管的,例如.class文件,所以我们便可以利用.gitignore文件来对不需要上传的文件进行忽略,这个文件在 git@osc 新建项目后就会存在于项目的根目录里,我们可以使用git pull origin master将该文件下载到本地,而在该gitignore文件中已经表示忽略.class文件,我们便可以执行rm -rf .gitgit initgit add .就会发现在向本地仓库中添加文件时已经将.class文件忽略。

建议的git上传代码顺序

在上面已经讲解了git上传的一个简单顺序,但实际上在操作之后就会发现,有些顺序并不合理,比如我并不需要将.class文件上传,所以我需要通过git pull origin master将远程仓库中的.gitignore文件下载到本地,但是我之前已经用过git commit指令将.class文件放入本地仓库了,难道我还要使用rm -rf .git.git文件夹删除后再重新来一遍吗?这么麻烦?

所以在下面两张截图中是我推荐的避免出现很多错误的git上传的命令顺序。

顺序是

ssh -T git@git.oschina.net
git init
git remote add origin http://git.oschina.net/你的用户名/你的项目名.git
git pull origin master
git add .
git commit -m "提交的描述信息"
git push origin master

在 IDEA 中使用 git

在现在的学习中,大部分同学使用的都是IDEA和eclipse,如果说,我们在使用IDEA编写完一个项目后再使用git上传,那么就会很麻烦,毕竟对于大部分人来说,接触一个新事物是需要耗费精力的,所以在IDEA中就为大家准备了很方便git上传方式。

在IDEA中使用git还是有前提条件的,并不是说我有了IDEA就可以直接使用git,我们还是需要在电脑上安装git,并且在IDEA中对git进行配置之后才能在IDEA中使用git

关于如何在IDEA中进行git的配置

在IDEA的界面下,我们可以使用Ctrl+Alt+S打开设置,也可以在左上角File→Settings打开设置界面

Settings界面内,选择左选项栏中的Version Control→Git→Path to Git executable,找到安装git\bin路径下的git.exe

点击右侧的Test,若路径正确会出现如下的提示

使用git

在完成git的配置之后,我们便可以直接在IDEA中使用git功能上传代码了,不过这里分别有两种方法,适用于两种不同的情况,

  1. 适用于新建一个项目
  2. 适用于已有的项目

适用于新建一个项目

我们首先在 git@osc 上新建一个项目,得到一个项目链接

在Intellij IDEA工具栏中选择 VCS——Checkout from Version Control——Git

在下面弹出的窗口中,粘贴 URL 然后点击CLONE

此处点击Test会出现如下图所示的提示

接下来逐步创建项目即可。完成后的项目是这个样子的,src文件夹需要自己建立并确定属性。

然后你可以做相应的修改操作,你就可以在本地项目中进行Git add commit等操作了,对应的操作方法是在项目的位置点击右键,出现菜单后,Git——Add,Git——Commit File或Git——Commit Directory,当然也可以直接Git——Repositroy——PUSH

如果是点击的Git——Commit File或Git——Commit Directory,界面如下所示

上方的文件夹框内可以勾选需要commit的文件,下面的文本框中可以填写Commit Message,根据自己的需求进行相应的选择和填写,完成后在最下方的点击Commit即可,在Commit之后记得使用push将本地仓库中的文件上传,当然也可将鼠标移至最下方Commit右侧的小三角,选择Commit and Push

点击后即可在远程仓库中看到自己上传的代码

适用于已有的项目

对于已有的非git项目,我们依旧需要先在 git@osc 上新建一个项目,得到一个项目链接

然后在Intellij IDEA工具栏中选择VCS——Import into Version Control——Create Git Repository,

然后依旧可以像上面的新建项目方法中那样对本地项目进行add Commit等操作,但在push之前还是需要进入项目文件夹,在git bush中使用

git remote add origin http://git.oschina.net/你的用户名/你的项目名.git

这是因为之前虽然通过VCS——Import into Version Control——Create Git Repository将项目变成了git项目,但并没有将本地仓库与远程仓库进行连接对应。

剩下的操作便和前面的一样了,不过一般来说在建立连接之后还需要使用git remote pull将远程仓库中的文件同步下来。

最后,在IDEA使用git的过程中,可以看到,在不同的状态下,左侧project文件栏中的文件名称会显示不同的颜色,对应可知,新建一个没有add以及Commit的文件会显示红色文件名,add Commit后的文件名是绿色,当文件完成push到远程仓库后,显示的是蓝色文件名

参考资料

posted @ 2016-04-03 03:44  20145328胡东晖  阅读(7807)  评论(9编辑  收藏  举报