微软收购Github以后,于当地时间2019年1月7日宣布Github私有仓库免费,但每个私有仓库的协作者不能超过3人。我们可以愉快地把自己的个人项目放在Github上了。以下是将一个本地旧仓库上传到Github的基本过程。
1. 首先注册Github帐号
然后点击Github页面右上角的➕,然后选择New repository
创建一个私有仓库
2. 输入仓库名称。
本例中仓库名称为test
,然后选择Private
,点击下方绿色的Create repository
。既然我们是推送旧仓库,就不要
选择Initialize this repository with a README。
后面的步骤其实都写在创建成功以后返回的页面上,此时你已经有了这个仓库的https和ssh链接:https://github.com/simonliu009/test.git
/ git@github.com:simonliu009/test.git
`
3. 设置https buffer
如果你使用https链接,那么建议先设置https的buffer
git config http.postBuffer 524288000
即修改提交缓存大小为500M(每个仓库都需要如此操作)。
否则上传较大项目很容易出现如下错误信息:
fatal: the remote end hung up unexpectedly
4. 上传
如下操作过程中应该会弹出github登录对话框,使用github账号登录即可。
- 4.1 如果你是在一个文件夹新建仓库,那么类似如下操作:
echo "# test" >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin https://github.com/simonliu009/test.git
git push -u origin master
//如果要推送所有分支
git push --all origin
- 4.2 如果你需要上传一个旧仓库,那么需要在仓库目录下:
git remote add origin https://github.com/simonliu009/test.git
git push -u origin master
//如果要推送所有分支
git push --all origin
以后再次更新只需要提交commit
以后git push
即可。
5. 常见问题
如果你不小心选择了Initialize this repository with a README
选项。那么运行git remote add origin https://github.com/simonliu009/test.git
可能会提示fatal: remote origin already exists.
所以最好是运行git remote set-url origin https://github.com/simonliu009/test.git
因为远程仓库此时已经有一个新的README.md
,所以如果你此时直接运行推送命令:
git push -u origin master
可能会提示
! [rejected] master -> master (fetch first)
error: failed to push some refs to 'https://github.com/simonliu009/test.git
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.
所以需要先把远程的仓库合并到本地,但是现在如果你直接git pull
可能会提示:
fatal: refusing to merge unrelated histories
所以你应该这样:
git pull origin master --allow-unrelated-histories
然后git add .
, 做一次提交:git commit
,然后再运行
git push -u origin master
以推送master分支。
或者
git push --all origin
以推送所有分支
6. 推送到多个远程仓库
有的时候我们需要把一个项目推送到多个远程仓库作为备份。假设我们已经在按照上文的方法设置了一个远程主机,别名是origin
,如果还需要推送到别的远程仓库有如下两种方法:
- 6.1 所有远程仓库使用相同的别名
origin
,假设第二个远程仓库主机是码云,我们的推送目标仓库地址为https://gitee.com/simonliu009/test.git
那么应该使用git remote set-url --add origin
设置
git remote set-url --add origin https://gitee.com/simonliu009/test.git
此时git remote -v
即可以看到所有的远程仓库
$ git remote -v
origin https://github.com/simonliu009/test.git (fetch)
origin https://github.com/simonliu009/test.git (push)
origin https://gitee.com/simonliu009/test.git (push)
以后如果要推送所有分支到所有远程仓库,只需要输入
git push --all origin
即可。
- 6.2 远程仓库使用不同的别名,比如使用gitee作为码云的远程仓库别名:
那么应该使用git remote add
设置
git remote add gitee https://gitee.com/simonliu009/test.git
git remote -v
即可以查看所有的远程仓库
$ git remote -v
gitee https://gitee.com/simonliu009/test.git (fetch)
gitee https://gitee.com/simonliu009/test.git (push)
origin https://github.com/simonliu009/test.git (fetch)
origin https://github.com/simonliu009/test.git (push)
那么推送到两个远程仓库则需要分别push两个别名:
- 推送到github使用:
git push --all origin
git push
推送当前分支 - 推送到gitee使用:
git push --all gitee
git push gitee master
推送master 分支