目录
一. 分布式版本控制管理系统
1. 理解分布式版本控制管理系统
二. 创建远程仓库
编辑
编辑
三. 克隆远程仓库_HTTP
四. 克隆远程仓库_SSH
配置公钥
添加公钥
五. git 向远程仓库推送
六. 拉取远程仓库
七. 忽略特殊文件
八. 配置别名
实际上,我们的 git 是一个分布式版本控制管理系统,那么什么是分布式版本控制管理系统呢?
我们现在要开发一个产品,我们是需要多人协作开发的,所以我们现在每个人都有一台电脑,我们的每台电脑上都有一个 git 仓库,我们为了多人协作开发方便,所以我们现在有一个中央服务器,中央服务器里面有一个仓库,用来存储我们协作开发的内容,如果我们中的任何一个人想要看别人开发的代码,我们只需要在中央服务器上 clone 下来,然后我们就可以看到别人开发的代码了
上面的这个是我们自己弄的,而 git 就是已经帮我们弄好了,所以 分布式版本控制管理系统就是上面的那个样子
我们使用的 git 平台是 码云 ,如果没有账户的话,可以先创建一个
下面会一步一步来,先到 gti 官网,登录上自己的账号,然后点击右上角的 ‘+’,然后点击 “新建仓库”
我们先看一下初始化仓库里面的这些选项有什么用
选则语言:就是我们仓库代码的语言
模板:就是里面有一些模板,其中就有 gitignore 模板,有该模板的话,可以在 add的时候自动忽略一些没有用的文件
开源许可证:选则了某个开源项目的话,就可以使用里面的某些内容等...
设置模板就是创建完仓库里面自带的文件
Readme:就是用来介绍该仓库项目的
Issue:就是写该项目遇到的问题的,以及可以管理这些问题
Poll Request:就是当我们有一个分支想要 merge 的时候,我们需要申请,而Pull Request 就是申请
分支模型:我们之前学过的分支,如果不选的话,我们也自动创建一个 master 分支
然后我们选则完毕后,点击创建就创建完成
如果我们想要对仓库进行管理的话,那么我们就点击管理
我们就可以对仓库进行管理
我们在我们的这个仓库里面 首先点击 克隆/下载,然后点击 HTTPS 在点击复制,然后我到我们的远程服务器上,我们使用 git clone + 复制的 URL
注意:不要在任何一个仓库目录下克隆
我们克隆后,我们要输入我们的 gitee 的用户名
然后输入我们的 gitee 的密码,linux下密码是不回显的
[lxy@hecs-165234 ~]$ git clone https://gitee.com/naxxkuku/remot-gitcode.git
Cloning into 'remot-gitcode'...
Username for 'https://gitee.com': naxxkuku
Password for 'https://[email protected]':
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 7 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (7/7), done.
我们克隆好后,我们的仓库就是这个样子
而这个远程仓库:origin 就是我们的远程仓库的名称
指令:git remote 查看远程仓库名(统称)
[lxy@hecs-165234 remot-gitcode]$ git remote
origin
指令:git remote -v 查看远程仓库的详细信息
[lxy@hecs-165234 remot-gitcode]$ git remote -v
origin https://gitee.com/naxxkuku/remot-gitcode.git (fetch)
origin https://gitee.com/naxxkuku/remot-gitcode.git (push)
上面的 URL 就是远程仓库的地址,而括号里面的 fetch(表示可以拉), push(表示可以推)
如果我们本地没有远程仓库的内容,那么我们就要使用 fetch权限,然后把本地仓库没有的给拉下来
如果我们本地仓库想要把开发的内容放到远程仓库,那么我们就要使用 push权限,把本地新的内容推送到远程仓库
使用 SSH 协议使用的是公钥加密和公钥登录的一个机制,我们要向使用SSH的话,我们需要将自己的服务器上的公钥放到 git 上进行管理。
下面查看 git 上是否配置公钥。
这里我们的 git 并没有配置公钥,我们配置一下。
如果这里没有配置,然后直接克隆试一下。
[lxy@hecs-165234 ~]$ git clone [email protected]:naxxkuku/remot-gitcode.git
Cloning into 'remot-gitcode'...
The authenticity of host 'gitee.com (180.76.198.77)' can't be established.
ECDSA key fingerprint is SHA256:FQGC9Kn/eye1W8icdBgrQp+KkGYoFgbVr17bmjey0Wc.
ECDSA key fingerprint is MD5:27:e5:d3:f7:2a:9e:eb:6c:93:cd:1f:c1:47:a3:54:b1.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'gitee.com,180.76.198.77' (ECDSA) to the list of known hosts.
Permission denied (publickey).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
这里就出错了。
到用户目录下查看是否有 .ssh 文件(没有就创建)
如果有的话,查看是否有 id_rsa 和 id_rsa.pub,其中 id_rsa.pub 就是公钥,有的话就直接复制粘贴到那个配置项里面就可以了
没有的话,我们输入这条命令 ssh-keygen -t rsa -C "[email protected]"(这个邮箱是 git 上填的邮箱),输入后,这里一路回车,什么都不用填写。
[lxy@hecs-165234 .ssh]$ ssh-keygen -t rsa -C "[email protected]"
Generating public/private rsa key pair.
Enter file in which to save the key (/home/lxy/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/lxy/.ssh/id_rsa.
Your public key has been saved in /home/lxy/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:BzyRXqxyiIJCaTFmGs8ErLp9TFFtb47xn/svPYEC3po [email protected]
The key's randomart image is:
+---[RSA 2048]----+
|+*+ ..o |
|+X. ..+.o |
|=.o o +++ |
|+ . o o =+o |
|o . . oS*+ . |
|. . .ooo . . |
| o o o... ..|
|. . o E o ...|
| . .o.oo|
+----[SHA256]-----+
[lxy@hecs-165234 .ssh]$ ll
total 12
-rw------- 1 lxy lxy 1679 Jul 30 15:56 id_rsa
-rw-r--r-- 1 lxy lxy 399 Jul 30 15:56 id_rsa.pub
-rw-r--r-- 1 lxy lxy 185 Jul 30 15:46 known_hosts
下面积都创建好了。
配置好后,我们打开公钥,然后赋值粘贴到配置项里面。
配置好后要输入密码。
这样就配置完成。
配置结束后就继续克隆。
[lxy@hecs-165234 ~]$ git clone [email protected]:naxxkuku/remot-gitcode.git
Cloning into 'remot-gitcode'...
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 7 (delta 0), reused 0 (delta 0), pack-reused 0
Receiving objects: 100% (7/7), done.
这样就成功了。
当我们的有远端仓库的时候,我们在查看一下 git 的配置,我们需要把git里面的 name 和 email 都配置成我们git 的。
名字就是这个。
邮箱就是我们 git 上填写的邮箱。
[lxy@hecs-165234 remot-gitcode]$ git config --global user.name "naxxkuku"
[lxy@hecs-165234 remot-gitcode]$ git config --global user.email "[email protected]"
[lxy@hecs-165234 remot-gitcode]$ git config -l
user.name=naxxkuku
[email protected]
core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
[email protected]:naxxkuku/remot-gitcode.git
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
branch.master.remote=origin
branch.master.merge=refs/heads/master
着用就配置好了。
[lxy@hecs-165234 remot-gitcode]$ git push origin master:master
[lxy@hecs-165234 remot-gitcode]$ git add .
[lxy@hecs-165234 remot-gitcode]$ git commit -m "linux 远程测试"
[master 00846ac] linux 远程测试
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 test.txt
[lxy@hecs-165234 remot-gitcode]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
# (use "git push" to publish your local commits)
#
nothing to commit, working directory clean
[lxy@hecs-165234 remot-gitcode]$ git push origin master:master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 283 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To [email protected]:naxxkuku/remot-gitcode.git
5fe97e9..00846ac master -> master
这里就好了,这里在细看一下 push
这里就是git push 命令,然后后面是 origin 表示远端,在后面是一个 master 表示本地的master 分支,后面的master 分支表示向远端的master分支推送,这里如果本地和远端都是master分支那么其实是可以省略只写一个的。
这时候我们的远程仓库也就推送到了。
场景:当为我们和其他人共同使用一个仓库时,我们需要别人编写的内容,所i我们需要从远端仓库拉取下来。
这里就不使用这种场景了,这里我们就直接修改远端的数据,然后我们在向下拉取。
现在我们开始向下拉取。
[lxy@hecs-165234 remot-gitcode]$ git pull origin master:master
[lxy@hecs-165234 remot-gitcode]$ git pull origin master:master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), done.
From gitee.com:naxxkuku/remot-gitcode
3e140e1..a16ec9b master -> master
Warning: fetch updated the current branch head.
Warning: fast-forwarding your working tree from
Warning: commit 3e140e153a9dae37ce64c4d81032588ce3f88507.
Already up-to-date.
[lxy@hecs-165234 remot-gitcode]$ cat test.txt
hello world
拉取测试~~~
我们这里拉取成功了。
这个就是拉取,origin 也表示远端,master分别表示远端和本地,这两个也能省略写。
在创建文件的时候我们可以挑选 .gitignore 文件,这个文件可以帮助我们忽略掉我们不想要被管理的文件。
我们当时创建库的时候并没有选择该文件,所以我们可以创建一个。
[lxy@hecs-165234 remot-gitcode]$ cat .gitignore
# 忽略文件
*.so
*.exe
我们向该文件里面写入 *.so 表示所有的 so后缀的文件都会被忽略。
现在我们测试一下。
[lxy@hecs-165234 remot-gitcode]$ touch test.so
[lxy@hecs-165234 remot-gitcode]$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 1 commit.
# (use "git push" to publish your local commits)
#
# Untracked files:
# (use "git add ..." to include in what will be committed)
#
# .gitignore
nothing added to commit but untracked files present (use "git add" to track)
我们创建了一个 test.so 文件,然后我们 git status 查看,我们发现只有我们刚才的 .gitignore 文件,我们的 test.so 文件已经被忽略。
那么我们再试一下,我们创建一个 test.txt 文件,然后我们push后查看远端。
[lxy@hecs-165234 remot-gitcode]$ touch test.exe
[lxy@hecs-165234 remot-gitcode]$ vim test.exe
[lxy@hecs-165234 remot-gitcode]$ vim test.so
[lxy@hecs-165234 remot-gitcode]$ git add .
[lxy@hecs-165234 remot-gitcode]$ git commit -m ".gitignore 文件测试"
[master e3e09e3] .gitignore 文件测试
1 file changed, 4 insertions(+)
create mode 100644 .gitignore
[lxy@hecs-165234 remot-gitcode]$ git push origin master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 313 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To [email protected]:naxxkuku/remot-gitcode.git
a16ec9b..e3e09e3 master -> master
我们发现并未被提交。那么我们就是向提交某一个 .so 文件呢?
[lxy@hecs-165234 remot-gitcode]$ git add -f right.so
[lxy@hecs-165234 remot-gitcode]$ touch right.so
[lxy@hecs-165234 remot-gitcode]$ git add -f right.so
[lxy@hecs-165234 remot-gitcode]$ git commit -m "强制提交忽略文件测试"
[master 4f7a650] 强制提交忽略文件测试
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 right.so
[lxy@hecs-165234 remot-gitcode]$ git push origin master
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 303 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To [email protected]:naxxkuku/remot-gitcode.git
e3e09e3..4f7a650 master -> master
这里要是想强制提交,那么就是带 -f 选项,但是这样带 -f 选项会破坏规则,所以我们还可以在 .gitignore 文件里面继续编写。
[lxy@hecs-165234 remot-gitcode]$ cat .gitignore
# 忽略文件
*.so
*.exe
!left.so
我们在前面加 ! 就表示不忽略该文件。下面测试一下。
[lxy@hecs-165234 remot-gitcode]$ touch left.so
[lxy@hecs-165234 remot-gitcode]$ git add .
[lxy@hecs-165234 remot-gitcode]$ git commit -m ".gitignore文件不忽略测试"
[master ba0b6df] .gitignore文件不忽略测试
2 files changed, 2 insertions(+)
create mode 100644 left.so
[lxy@hecs-165234 remot-gitcode]$ git push origin master
Counting objects: 5, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 334 bytes | 0 bytes/s, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To [email protected]:naxxkuku/remot-gitcode.git
4f7a650..ba0b6df master -> master
如果当我们的 .gitignore 文件里面的忽略配置太多,我们也不知道我们到底有没有忽略,我们可以使用命令查看一下。
[lxy@hecs-165234 remot-gitcode]$ git check-ignore -v up.so
[lxy@hecs-165234 remot-gitcode]$ touch up.so
[lxy@hecs-165234 remot-gitcode]$ git check-ignore -v up.so
.gitignore:3:*.so up.so
这里就可以看到我们的 up.so 时被忽略的,到 .gitignore 的第三行。
有时候我们在 git 操作的时候命令太长,我们可以对其进行配置
[lxy@hecs-165234 remot-gitcode]$ git log --pretty=oneline --abbrev-commit
我们想对这条命令进行配置一下。
[lxy@hecs-165234 remot-gitcode]$ git config --global alias.缩写名 '被缩写的命令'
上面这个就是指令,我们来试验一下。
[lxy@hecs-165234 remot-gitcode]$ git config --global alias.lps 'log --pretty=oneline --abbrev-commit'
下面我们看一下我们的配置是否可以。
[lxy@hecs-165234 remot-gitcode]$ git lps
ba0b6df .gitignore文件不忽略测试
4f7a650 强制提交忽略文件测试
e3e09e3 .gitignore 文件测试
a16ec9b update test.txt.
3e140e1 git 远端测试
00846ac linux 远程测试
5fe97e9 Initial commit
当然我们配置后原指令也是可以继续生效的。
[lxy@hecs-165234 remot-gitcode]$ git log --pretty=oneline --abbrev-commit
ba0b6df .gitignore文件不忽略测试
4f7a650 强制提交忽略文件测试
e3e09e3 .gitignore 文件测试
a16ec9b update test.txt.
3e140e1 git 远端测试
00846ac linux 远程测试
5fe97e9 Initial commit
git 的远程操作就到这里,我们下次再见~