记录--git命令行上传项目到github仓库

由于公司一直使用的是的SVN,基本上都是内网,原来的git命令都快忘记了,当然也是自己太懒,平时都是直接拖到github上。今天打开idea后突然看到了原来自己写好的一个项目,就想将它上传到github上,也顺便再复习一下git命令,没想到也是遇到了很多坑,也是参考了几个大神的博客才解决,因此想记录一下。

因为项目是之前写好的,一直放在idea的工作空间里,git是之前已经下好的,包括github上仓库已经建好,万事俱备。

1.首先是打命令行窗口 ,cd到项目的目录中

yht:~ YHT$ cd /Users/ae/IdeaProjects/CloudDisk
yht:CloudDisk YHT$ ls
HELP.md mvnw.cmd src
mvnw pom.xml target

2.然后在初始化仓库

yht:CloudDisk YHT$ git init
Initialized empty Git repository in /Users/ae/IdeaProjects/CloudDisk/.git/

3.设置用户名和邮箱

刚开始时就直接add然后commit -m,就会提示让你先输入邮箱和用户名。 下面都有提示该怎么敲命令,还是非常友好的,有时候命令敲错了,漏掉一两个单词也会给出提示。

#如果没有设置邮箱和名字直接commit会提示你设置
yht:CloudDisk YHT$ git commit -m "project first 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 'YHT@yht.(none)')

忘记了是否设置过,可以用命令查看一下,如果设置过了会显示出来。

yht:.ssh YHT$ git config --global --list
user.email=你的邮箱
user.name=你的名字
#没有的话设置一下
yht:.ssh YHT$ git config --global user.email "你的邮箱"
yht:.ssh YHT$ git config --global user.name "你的名字" 

4.测试SSH连接

记得原来生成过一次秘钥,但是上github上的setting中的SSH keys看了一下,发现只有一个SSH Key,好像绑定的是另一个电脑,因此就重新生成一个吧。

cd /Users/ae/.ssh
yht:.ssh YHT$ ssh-keygen -t rsa -C "你的邮箱" #回车 #回车 #回车 Your identification has been saved in /Users/ae/.ssh/id_rsa.
Your public key has been saved in /Users/ae/.ssh/id_rsa.pub.

输完命令回车就行 会在.ssh文件下生成一个 id_rsa 和一个 id_rsa.pub文件

通过cat id_rsa.pub或vi id_rsa.pub 查看该文件,然后复制到 github中的setting-->SSH and GPG keys-->New SSH key,取个你喜欢的名字然后将秘钥复制到里面。

然后测试SSH连接

yht:.ssh YHT$ ssh -T git@github.com 
Hi aoteman! You've successfully authenticated, but GitHub does not provide shell access.

当时也是没有生成SSH Keys直接commit  然后就一直报错

git@github.com: Permission denied (publickey).

5.提交代码到远程仓库

先设置一下远程仓库的地址,因为我们使用的是SSH连接,在github中点开仓库,然后Clone or download,右上角选择SSH连接,复制一下远程仓库地址。

#设置远程仓库地址
yht:CloudDisk $YHT git remote add origin "你的远程仓库地址"
#查看远程仓库地址
yht:CloudDisk YHT$ git remote -v
origin git@github.com:aoteman/CloudDisk.git (fetch)
origin git@github.com:aoteman/CloudDisk.git (push)
...
yht:CloudDisk YHT$ git push -u origin master 

到此本以为大功告成了,只剩下add、commit、push即可,然而再push的时候再次出现问题。。。

hint: Updates were rejected because the remote contains work that you do
hint: not have locally. This is usually caused by another repository pushing
hint: to the same ref. You may want to first integrate the remote changes
hint: (e.g., 'git pull ...') before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.

翻译过来的意思大概就是远程仓库包含你还没有的文件,你可以在push之前先pull一下,想了一下确实远程仓库中初始化的有README.md文件,不是一个空的仓库,因此使用git pull先拉取到本地。

拉取完成后总可以提交了吧,然而还是报错

fatal: refusing to merge unrelated histories 
(拒绝合并不相关的历史)

百度了一下说是因为本地仓库并不是从远程仓库中git clone下来的,实质上是两个独立的仓库,确实是这样,我是先在github上创建了一个仓库,又在本地的项目中去git init了,然后找到了一条命令:

git pull origin master --allow-unrelated-histories(该选项可以合并两个独立启动仓库的历史)

最后 将本地仓库中的文件推送到远程仓库即可。

git push -u origin master

6.总结:知识学过了如果不经常使用总是容易忘,平时的工作学习都是阶段性的,很容易忽略一些学过的重要的知识,因此平时要多总结,养成一个好习惯,加油!

上一篇:Node.js中实现套接字服务


下一篇:MATLAB中文论坛帖子整理(GUI)