携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第11天,点击查看活动详情
⭐️前面的话⭐️
✉️坚持和努力一定能换来诗与远方!
💭推荐书籍:📚《王道408》,📚《深入理解 Java 虚拟机-周志明》,📚《Java 核心技术卷》
💬算法刷题:✅力扣🌐牛客网
🎈Github
🎈码云Gitee
常用命令
-
获取 Git 仓库的 2种方法
- 在现有目录中初始化仓库:进入项目目录运行
git init命令,该命令将创建一个名为.git的子目录。 - 从一个服务器克隆一个现有的 Git 仓库:
git clone [url]
- 在现有目录中初始化仓库:进入项目目录运行
1
# 初始化
2
git init;
3
4
# 添加远程库(本地库关联远程库)
5
git remote add gitee https://gitee.com/Lemonade19/Java_notes.git
6
git remote add github https://github.com/cat0501/Java_notes_code.git
7
8
# 远程仓库的移除与重命名
9
git remote rename test test1
10
git remote rm test1
11
12
# 查看提交历史
13
git log
14
## 只看某个人的提交记录
15
git log --author=bob
16
17
# 用户名和邮箱配置(项目级别)
18
git config user.name Lemonade19
19
git config user.email 17782975312@163.com
- 提交更新到仓库(本地库同步到 Github、Gitee等)
1
# 检测当前文件状态
2
git status
3
4
# 添加到本地(暂存区)
5
git add .
6
7
# 提交更新到 版本库
8
git commit -m "github";
9
10
# 推送改动到 远程仓库
11
git push github master
12
git push origin master
13
14
# 修改最后一次 commit 的注释信息
15
git commit --amend
16
# 修改某几次 commit 的信息
17
git rebase -i HEAD~2
18
// 或者
19
git rebase -i {commitID} // 例如 git rebase -i d95ddfb
20
21
22
# git配置大小写敏感
23
$ git config core.ignorecase
24
true
25
# 下面设置大小写敏感为敏感
26
$ git config core.ignorecase false
27
28
# cmd git页面中文显示为数字,不是乱码
29
git config --global core.quotepath false
- 分支
1
# 列出本地分支
2
git branch
3
# 查看远程分支
4
git branch -r
5
6
# 新建一个本地分支 test
7
git branch test
8
# 切换当前分支到 test
9
git checkout test
10
11
# 创建分支并切换过去(上面两条命令的合写)
12
git checkout -b feature_x
13
14
# 切换到主分支
15
git checkout master
16
17
# 合并分支(可能会有冲突)
18
git merge test
- 整体流程
-
git init:创建 Git 库。 -
git status:查看当前仓库的状态。 -
git show:# 显示某次提交的内容 git show $id -
git diff:查看本次修改与上次修改的内容的区别。 -
git add <file>:把现在所要添加的文件放到暂存区中。-
git log -p <file>:查看每次详细修改内容的 diff 。 -
git rm <file>:从版本库中删除文件。 -
git reset <file>:从暂存区恢复到工作文件。 -
git reset HEAD^:恢复最近一次提交过的状态,即放弃上次提交后的所有本次修改` 。HEAD 本身是一個游标,它通常會指向某一个本地端分支或是其它 commit,所以你也可以把 HEAD 当做是目前所在的分支(current branch)。 可参见 《Git 中 HEAD 是什么东西》 。
-
-
git commit:把 Git add 到暂存区的内容提交到代码区中。 -
git clone:从远程仓库拷贝代码到本地。 -
git branch:查看当前的分支名称。git branch -r:查看远程分支。
-
git checkout:切换分支。 -
git merge <branch>:将 branch 分支合并到当前分支。 -
git stash:暂存。git stash pop:恢复最近一次的暂存。
-
git pull:抓取远程仓库所有分支更新并合并到本地。git push origin master:将本地主分支推到远程主分支。
Git 工具?
1)命令行
只能说十个里面九个菜,还有一个是大神,虽然命令行提供了全部的功能,但是很多用 GUI 工具可以很便捷解决的问题,命令行做起来都比较麻烦。
当然并不是让大家不要去命令行,通过命令行可以对 git 的功能和原理有一个更深入的了解。
2)IDEA Git 插件
IDEA Git 插件越来越强大,很多时候,我们日常使用 Git ,更多使用它。具体的教程,可以看看 《IntelliJ IDEA 下的使用 git》 。
3)SourceTree
可以说是最好用的 Git 工具,没有之一。
日常使用的一个图形化的 Git 增强工具,而最好用的功能就在于它集成了 GitFlow ,让开发者可以更简单、更规范的去做一些 Git 操作;
另外它还提供了更友好的 merge 界面,但是操作起来不是很顺手,因为它只支持整行删除。
4)其它
Git 和 SVN 的优缺点?
Git 是分布式版本控制系统,SVN 是集中式版本控制系统。
1)🦅SVN 的优缺点
-
优点
- 1、管理方便,逻辑明确,符合一般人思维习惯。
- 2、易于管理,集中式服务器更能保证安全性。
- 3、代码一致性非常高。
- 4、适合开发人数不多的项目开发。
-
缺点
- 1、服务器压力太大,数据库容量暴增。
- 2、如果不能连接到服务器上,基本上不可以工作,因为 SVN 是集中式服务器,如果服务器不能连接上,就不能提交,还原,对比等等。
- 3、不适合开源开发(开发人数非常非常多,但是 Google App Engine 就是用 SVN 的)。但是一般集中式管理的有非常明确的权限管理机制(例如分支访问限制),可以实现分层管理,从而很好的解决开发人数众多的问题。
2)🦅Git 优缺点
-
优点
- 1、适合分布式开发,强调个体。
- 2、公共服务器压力和数据量都不会太大。
- 3、速度快、灵活。
- 4、任意两个开发者之间可以很容易的解决冲突。
- 5、离线工作。
-
缺点
- 1、学习周期相对而言比较长。
- 2、不符合常规思维。
- 3、代码保密性差,一旦开发者把整个库克隆下来就可以完全公开所有代码和版本信息。
所以,很多公司的开发团队使用 Git 作为版本管理,而产品团队使用 SVN 。
Git 服务器
-
公有服务方案
- Github
- Gitee
-
私有化部署方案
- GitLab
- Gogs
- Bitbucket
注意,Gitlab 和 Bitbucket 也提供公有服务的方案。
-
一般情况下,大多数公司使用 GitLab 作为 Git 服务器。
- GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
- 不过因为 GitLb 使用 Ruby on Rails 实现,所以占用的系统资源会比较多。
- 它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。
参考&推荐
-
读者写的非常棒,即使不准备面试,也可以看看,作为平时使用 Git 一些场景下的解决方案。
-
git配置多个账号:www.cnblogs.com/50how/p/157…
-
如何将本地仓库同时同步至多个Git远程仓库
一些其它问题
一个本地库能不能既关联 GitHub,又关联 Gitee 呢?
答案是肯定的,因为 git 本身是分布式版本控制系统,可以同步到另外一个远程库,当然也可以同步到另外两个远程库。 使用多个远程库时,我们要注意,git 给远程库起的默认名称是
origin,如果有多个远程库,我们需要用不同的名称来标识不同的远程库。
1)取消全局设置
1
# 查看
2
git config user.name
3
git config user.email
4
5
# 取消
6
git config --global --unset user.name
7
git config --global --unset user.email
2)配置秘钥
由于你的本地 Git 仓库和 GitHub 仓库之间的传输是通过 SSH 加密的,所以我们需要配置验证信息。
- 使用以下命令生成 SSH Key:
1
# 后面的 your_email@youremail.com 改为你在 Github 或Gitee上注册的邮箱,
2
# 之后会要求确认路径和输入密码,我们这使用默认的一路回车就行。
3
$ ssh-keygen -t rsa -C "youremail@example.com"
4
5
ssh-keygen -t rsa -C "17782975312@163.com"
6
ssh-keygen -t rsa -C "pxzjl123@icloud.com"
- 成功的话会在 ~/ 下生成 .ssh 文件夹,进去打开 id_rsa.pub,复制里面的 key。
注:根据runoob官网,只用在本地~/下.ssh 文件夹中生成一个秘钥就好,但是我根据思否博主建议对每个账户(GitHub、Gitee)生成了一个秘钥然后改名并分别配置到了GitHub和Gitee中,秘钥文件如上图。
id_rsa是私钥 id_rsa.pub是公钥
3)关联 GitHub 和 Gitee
- 先关联 GitHub 的远程库:
1
$ git remote add github git@github.com:tianqixin/runoob-git-test.git
注意,远程库的名称叫 github,不叫 origin 了。
- 接着,再关联 Gitee 的远程库:
1
$ git remote add gitee git@gitee.com:imnoob/runoob-test.git
同样注意,远程库的名称叫 gitee,不叫 origin。
- 现在,我们用 git remote -v 查看远程库信息,可以看到两个远程库。
1
$ git remote -v
2
gitee git@gitee.com:imnoob/runoob-test.git (fetch)
3
gitee git@gitee.com:imnoob/runoob-test.git (push)
4
github git@github.com:tianqixin/runoob.git (fetch)
5
github git@github.com:tianqixin/runoob.git (push)
4)推送改动
1
# 添加和提交
2
git add .
3
git commit -m "xxx"
4
5
# 推送到 GitHub
6
git push github master
7
# 推送到 Gitee
8
git push gitee master
这样一来,我们的本地库就可以同时与多个远程库互相同步:
如下:
Github 如何设置 master 为默认分支?
- 需要在当前项目的
setting里面修改默认分支,账户里面修改无效。
git push -u的含义和用法
- 第一次加了参数
-u后,以后即可直接用 git push 代替 git push origin master - blog.csdn.net/chenzz444/a…
测试一下本地私钥和网站公钥配置是否成功?
在config文件中,给GitHub网站配置的别名就是github,所以直接使用别名,就是
1
ssh -T git@github
- 遇到问题:
1
The authenticity of host 'github.com (20.205.243.166)' can't be established.
- 解决:Google之后明白,少了一个 known_hosts 文件,本来密钥文件应该是三个,现在是两个,便报了这样的错误,此时选择yes回车之后,便可同时生成了缺少了的 known_hosts文件。
秘钥
Git配置多个用户
终端配置
更新完 zsh 说我目录权限问题的解决 www.jianshu.com/p/f2545c1fe…
报错内容如下:
1
[oh-my-zsh] For safety, we will not load completions from these directories until
2
[oh-my-zsh] you fix their permissions and ownership and restart zsh.
3
[oh-my-zsh] See the above list for directories with group or other writability.
4
5
[oh-my-zsh] To fix your permissions you can do so by disabling
6
[oh-my-zsh] the write permission of "group" and "others" and making sure that the
7
[oh-my-zsh] owner of these directories is either root or your current user.
8
[oh-my-zsh] The following command may help:
9
[oh-my-zsh] compaudit | xargs chmod g-w,o-w
10
11
[oh-my-zsh] If the above didn't help or you want to skip the verification of
12
[oh-my-zsh] insecure directories you can set the variable ZSH_DISABLE_COMPFIX to
13
[oh-my-zsh] "true" before oh-my-zsh is sourced in your zshrc file.
解决方案
1
chmod 755 /usr/local/share/zsh
2
chmod 755 /usr/local/share/zsh/site-functions
\