一、远程仓库
通常我们并不常亲自建立远程仓库,而是委托给『第三方』。
常见的操作是,先在第三方上创建『远程 Git 文档库』,然后复制(Clone)出一个『本地 Git 文档库』
1、在托管网站上创建远程仓库
常见的代码托管仓库有:
-
国外:github、gitlib
-
国内:gitee、Coding
在托管网站上创建项目后,通常项目目录下是空的,可以通过以下 2 种途径初始化该项目:
创建远程仓库
远程仓库创建成功后需要配置自己生成的密钥【了解】
生成密钥
ssh-keygen -t rsa -b 4096 -C "备注" ///一路回车cat ~/.ssh/id_rsa.pub //查看密钥然后复制到gitee上,如下
管理员启动cmd,如果显示没有这个命令的话就用git窗口执行
生成密钥
生成成功后查看密钥,红色框内的为密钥
然后复制粘贴密钥到
然后生成密钥
2、克隆(拉取)远程仓库至本地
git clone <远程文档库的路径> <本地文档库的文件夹名称>
更具体的的格式为:
git clone <http://Web服务器地址/远程文档库路径> <本地文档库名称>
例如:
git clone https://github.com/<用户名>/<项目名>.git
如果你在托管网站上添加了你本机的 ssh-key,那么还可以使用如下格式:
git clone <Git账号>@<SSH服务器地址>:<远程文档库路径> <本地文档库路径>
3、推送本地仓库内容到远程仓库
当我们完成对本地文档库的修改,可以将这些修改『推送』到远程 Git 仓库:
如果是第一次推送一个工程到远程仓库
git remote add origin 远程仓库地址 如: git remote add orign https://gitee.com/xiaokongming/three.git
然后:
git pull --rebase origin master //同步远程的数据
git push origin [分支名称]
如:
git push origin master
如果出现not found 就要先同步远程数据之后再提交
git push 有两种模式:
-
推送本地『所有』分支,
-
推送『当前』分支。
-
如多使用第一种模式,配置:
git config --global push.default matching #第一种配置 git config --global push.default simple #第二种配置 Git2.0 默认
第二种模式更安全,推荐使用第二种。
无论哪种传送模式,只要执行 git push --all 都是推送所有分支
实验操作:
如:在本地添加一个文件,
git add "add.txt" #提交到本地暂存区
git commit -m "v6"
git push origin master
4、添加仓库开发者
由于gitee上的仓库为私有的,只有自己才能对远程仓库进行操作,如果团队中的其他成员需要对该远程仓库进行操作,必须将团队成员的gitee帐号添加到仓库中。
提示:一个远程仓库最多只能添加5个成员
配置好后团队的其他成员就可以使用到该仓库
5、设置分支保护
6、推送冲突
如果远程分支并非你一个人独有,那么很有可能由于别人的提交,导致远程分支向前演进,从而导致 push 失败。此时需要『三步合并法』解决冲突问题。
-
从远程 Git 文档库取回当前所在分支的最新数据。
-
把远程 Git 文档库的分支合并到本地 Git 的分支。这一步可能会出现冲突。解决冲突,合并代码。
-
add-commit-push
三联,提交并推送本地数据至远程 Git 文档库。
git pull 命令可以完成前两部操作。它等价于:先执行 git fetch,再执行 git rebase origin/master 。
7、fetch 和 pull
如果你有一个远程 Git 分支,比如在 GitHub 上的分支,当远程分支上包含当前分支没有的提交时,可以使用取回。
比如,当合并了另一个分支或你的同事推送了一个快速修复时。
通过在这个远程分支上执行 git fetch
,我们就可在本地获取这些修改。这不会以任何方式影响你的本地分支:fetch 只是单纯地下载新的数据而已 。现在我们可以看到自上次推送以来的所有修改了。这些新数据也已经在本地了,我们可以决定用这些新数据做什么了。
尽管 git fetch 可用于获取某个分支的远程信息,但我们也可以执行 git pull
。git pull
实际上是两个命令合成了一个:git fetch
+ git merge
。当我们从来源拉取修改时,我们首先是像 git fetch
那样取回所有数据,然后最新的修改会自动合并到本地分支中。我们现在与远程分支完美同步了,并且也有了所有最新的修改