0. 准备工作
在关联远程代码仓库之前,需要在代码仓库中添加本地的ssh公钥,整个数据传输是一个对称加密机制,这一点就不需要重点讲了。就是通过ssh-keygen命令创建。
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"
这样就会创建一个新的ssh key,使用email作为秘钥的label
然后回车回车就行,当然也可以自己指定秘钥存储位置。默认是在根目录下的.ssh文件夹中,如下图所示。
最后复制粘贴到代码仓库的对应位置,具体见下图。
1.关联代码仓库
需求:本地你的项目,你想push上去,肯定是需要关联代码仓库的。
其实直接可以先使用命令git clone url,这样会在当前文件夹中建立一个远程代码仓库的文件夹,关联什么的都做好了,只需要把自己的项目复制到这个文件夹里,然后push上去就行。
但是有时候就是想在项目所在目录下关联代码仓库,就需要用以下的方法了。
1.1 本地项目关联远程空的代码仓库
如下图所示,就是没有那个readme文件的空仓库。
- 找到你的项目的位置,打开git bash。
- 初始化本地仓库
git init
- 关联远程代码库
解释:就是为远程代码库对于一个名字,一般去名字为origin,我这里一般化,写了个yu
git remote add yu git@codehub.devcloud.huaweicloud.com:Test00097/test.git
关联之后,你肯定想知道现在能不能push了
使用命令git status查看当前状况
git status
可以看到以下结果,这表明我们已经关联上了。
- 然后执行push的一系列命令
git add .
git commit -m "代码提交"
git push
然后出现以下的错误,原因是,我们没有指定具体push到远程的哪个代码仓库的哪个分支
fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository usinggit remote add <name> <url>
and then push using the remote name
git push <name>
接着我们输入这条命令
# push到远程库名为yu的master分支上
git push yu master
可以看到成功提交上去了。
接下来我们来看看情况2:本地有代码,远程代码仓库非空,比如:自动创建了一个readme文件。
1.2 本地项目关联远程非空代码仓库
这种情况较第一种比较复杂,但是只要按照以下命令来,是没问题的。
首先我们可以通过下图看到,代码仓库非空,自动创建了一个readme文件。
然后我们按照正常的命令来关联
首先还是初始化本地仓库,关联代码库,这个“he”是我给远程代码库取的名字而已。
git init
git remote add he git@codehub.devcloud.huaweicloud.com:Test00097/test.git
然后由于远程仓库有文件,我们需要pull下来,下面的命令是肯定会出错的。
git pull
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.git pull <remote> <branch>
If you wish to set tracking information for this branch you can do so with:
git branch --set-upstream-to=he/<branch> master
我们先选择第一种方式,加上具体的仓库和分支信息
git pull he master
可以看到成功的将远程代码仓库的readme.md文件pull到本地了
当然我们也可以选择第二种方式,本地分支track追踪远程分支,设置完后可以直接使用git pull命令,不需要指定哪个仓库,哪个分支了。
git branch --set-upstream-to=he/master master
其中,he/master表示远程的he仓库,最后的master表示本地的master的分支
命令的意思为:本地master分支设置为跟踪远程的he代码仓库的master分支
但是如果直接使用第二种方式,它会提示没有master branch。
我们看看当下有哪些分支
git branch -a
毫无疑问,显示为空, 这时我们需要将远程仓库he的分支给fetch过来
git fetch he
# 合并到本地分支
git checkout master
这时候我们都不需要设置upstream ,直接默认track了
若我们使用的是第一种方式,我们试试能不能把本地的项目push上去,按照我们正常的push命令,这里肯定也是会出错的
git add .
git commit -m "上传代码"
git push
运行完代码后显示
fatal: No configured push destination.
Either specify the URL from the command-line or configure a remote repository usinggit remote add <name> <url>
and then push using the remote name
git push <name>
然后第一步我们已经做过了,接下来做第二步。
其实我们可以直接输入以下命令,意为:将本地提交push到远程代码库名为he的master分支上
git push he master
但是我们还是按照正常的提示来吧
git push he
fatal: The current branch master has no upstream branch.
To push the current branch and set the remote as upstream, usegit push --set-upstream he master
让我们设置以下默认的upstream
git push --set-upstream he master
如果依然提示没有master分支的话,我们可以使用上面提到的,git fetch he,如果没有就不用了。
这样我们就可以通过以下命令push了,默认就是push到he的master分支上
git push
2. 其他问题
- 远程仓库有一个文件名和本地项目的文件名相同
出现如下错误信息
error: The following untracked working tree files would be overwritten by checkout:
a.c
Please move or remove them before you switch branches.
Aborting
这时候你可以将同名的文件重命名
mv filea filea1
然后再使用你想使用的命令。
- 若出现拒绝合并的错误信息时
refusing to merge unrelated histories
在命令后加--allow-unrelated-histories参数即可
git pull origin master --allow-unrelated-histories