记录--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.设置用户名和邮箱
忘记了是否设置过,可以用命令查看一下,如果设置过了会显示出来。
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 "你的名字"
刚开始时就直接add然后commit -m,就会提示让你先输入邮箱和用户名。 下面都有提示该怎么敲命令,还是非常友好的,有时候命令敲错了,漏掉一两个单词也会给出提示。
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)')
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.总结:知识学过了如果不经常使用总是容易忘,平时的工作学习都是阶段性的,很容易忽略一些学过的重要的知识,因此平时要多总结,养成一个好习惯,加油!