前言
本文介绍了如何使用 Git 创建远程仓库,并将本地代码推送到远程仓库。
1. Git 的安装
1.1 Linux CentOS 环境下安装
首先,你可以试着输入 Git,看看系统有没有安装 Git:
git
-bash: git: command not found
如果出现上面的结果,说明你并没有安装 Git。
安装 Git 命令:
sudo yum -y install git
查看 Git 安装的版本:
git --version
1.2 Linux Ubuntu 环境下安装
首先,你可以试着输入 Git,看看系统有没有安装 Git:
git
Command 'git' not found, but can be installed with:
sudo apt install git
如果出现上面的结果,说明你并没有安装 Git。
安装 Git:
sudo apt-get install git -y
查看 Git 安装版本:
git --version
2. 创建 Git 本地仓库
仓库是进行版本控制的一个文件目录。我们要想对文件进行版本控制,就必须先创建一个仓库出来。所以本地仓库和远程仓库本质上都是一个文件!这也印证了一句话 Linux 下一切皆文件。
指令:
git init
注意我们不能修改原先 Git 仓库的所有内容,不然会导致正常的 Git 操作会出错。
3. 配置 Git
当安装 Git 后首先要做的事情是设置你的用户名称和 e-mail 地址,这是非常重要的。配置命令为:
git config [--global] user.name "Your Name"
git config [--global] user.email "[email protected]"
# 把 Your Name 改成你的昵称
# 把 [email protected] 改成邮箱的格式,只要格式正确即可。
其中 --global 是一个可选项。如果使用了该选项,表示这台机器上所有的 Git 仓库都会使用这个配置。如果你希望在不同仓库中使用不同的 name 或 e-mail,可以不要 --global 选项,但要注意的是,执行命令时必须要在仓库里。
查看配置命令为:
git config -l
删除对应的配置命令为:
git config [--global] --unset user.name
git config [--global] --unset user.email
4. 认识工作区、暂存区、版本库
- 工作区:是在电脑上你要写代码或文件的目录。
- 暂存区:英文叫 stage 或 index。一般存放在 .git 目录下的 index 文件(.git/index)中,我们把暂存区有时也叫作索引(index)。
- 版本库:又名仓库,英文名 repository。工作区有一个隐藏目录
.git,它不算工作区,而是 Git 的版本库。这个版本库里面的所有文件都可以被 Git 管理起来,每个文件的修改、删除,Git 都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以'还原'。
- 图中左侧为工作区,右侧为版本库。Git 的版本库里存了很多东西,其中最重要的就是暂存区。
- 在创建 Git 版本库时,Git 会为我们自动创建一个唯一的 master 分支,以及指向 master 的一个指针叫 HEAD。
- 当对工作区修改 (或新增) 的文件执行
git add命令时,暂存区目录树的文件索引会被更新。 - 当执行提交操作
git commit时,master 分支会做相应的更新,可以简单理解为暂存区的目录树才会被真正写到版本库中。
由上述描述我们便能得知:通过新建或粘贴进目录的文件,并不能称之为向仓库中新增文件,而只是在 Work 区新增了文件。必须要通过使用 git add 和 git commit 命令才能将文件添加到仓库中进行管理!!!
5. 添加文件
5.1 git 命令
在包含 .git 的目录下新建一个 ReadMe 文件,我们可以使用 git add 命令可以将文件添加到暂存区。
添加一个或多个文件到暂存区:
git add [file1] [file2] ...
添加指定自录到暂存区,包括子目录:
git add [dir]
添加当前目录下的所有文件改动到暂存区:
git add .
5.2 commit 命令
再使用 git commit 命令将暂存区内容添加到本地仓库中:
提交暂存区全部内容到本地仓库中:
git commit -m "message"
提交暂存区的指定文件到仓库区:
git commit [file1][file2] -m "message"
6. 远程操作
6.1 新建远程仓库
新建远程项目仓库:
在代码托管平台上创建一个新的仓库。
6.2 克隆远程仓库
克隆/下载远端仓库到本地,需要使用 git clone 命令,后面跟上我们的远端仓库的链接,远端仓库的链接可以从仓库中找到:选择'克隆/下载'获取远程仓库链接。
SSH 协议和 HTTPS 协议是 Git 最常使用的两种数据传输协议。SSH 协议使用了公钥加密和公钥登陆机制,体现了其实用性和安全性,使用此协议需要将我们的公钥放上服务器,由 Git 服务器进行管理。使用 HTTPS 方式时,没有要求,可以直接克隆下来。
我们这里直接采用最简单的方法:使用 HTTPS 协议。
clone 命令:
git clone 远程仓库克隆的网站
当我们从远程仓库克隆后,实际上 Git 会自动把本地的 master 分支和远程的 master 分支对应起来,并且,远程仓库的默认名称是 origin。在本地我们可以使用 git remote 命令,来查看远程库的信息,如:
git remote
用 git remote -v 显示更详细的信息:
git remote -v
上面显示了可以抓取和推送的 origin 的地址。如果没有推送权限,就看不到 push 的地址。推送是什么意思呢,我们继续往下看。
6.3 向远程仓库推送 push
本地已经 clone 成功远程仓库后,我们便可以向仓库中提交内容,例如新增一个 file.txt 文件:
# 新建文件
user@host:~/git_teaching$ ls
README.en.md README.md
user@host:~/git_teaching$ vim file.txt
user@host:~/git_teaching$ cat file.txt
hello git
# 提交文件
user@host:~/git_teaching$ git add .
user@host:~/git_teaching$ git commit -m "create file.txt"
[master 7ce3183] create file.txt
1 file changed, 1 insertion(+)
create mode 100644 file.txt
提交时要注意,如果我们之前设置过全局的 name 和 e-mail,这两项配置需要和远程仓库上配置的用户名和邮箱一致,否则会出错。或者从来没有设置过全局的 name 和 e-mail,那么我们第一次提交时也会报错。这就需要我们重新配置下了,同样要注意需要和远程仓库上配置的用户名和邮箱一致。
到这里我们已经将内容提交至本地仓库中,如何将本地仓库的内容推送至远程仓库呢,需要使用 git push 命令,该命令用于将本地的分支版本上传到远程并合并,命令格式如下:
git push <远程主机名> <本地分支名>:<远程分支名>
# 如果本地分支名与远程分支名相同,则可以省略冒号:
git push <远程主机名> <本地分支名>
此时我们要将本地的 master 分支推送到 origin 主机的 master 分支,则可以:
user@host:~/git_teaching$ git push origin master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 308 bytes | 308.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote: Powered by GITEE.COM [GNK-6.4]
To gitee.com:user/git_teaching.git
c6ce3f0..7ce3183 master -> master
推送成功!
7. 拉取远程仓库
如果我们在远程仓库进行更改的时候,我们本地是看不见的。
此时,远程仓库是要领先于本地仓库一个版本,为了使本地仓库保持最新的版本,我们需要拉取下远端代码,并合并到本地。Git 提供了 git pull 命令,该命令用于从远程获取代码并合并本地的版本。格式如下:
git pull <远程主机名> <远程分支名>:<本地分支名>
# 如果远程分支是与当前分支合并,则冒号后面的部分可以省略。
git pull <远程主机名> <远程分支名>
使用一下:
# 拉取远程分支,并与当前分支进行合并
user@host:~/git_teaching$ git pull origin master
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 1.02 KiB | 1.02 MiB/s, done.
From gitee.com:user/git_teaching
* branch master -> FETCH_HEAD
7ce3183..60e6b0a master -> origin/master
Updating 7ce3183..60e6b0a Fast-forward
README.md | 2 ++
1 file changed, 2 insertions(+)
user@host:~/git_teaching$ cat README.md
... 第一次修改内容
我们发现,拉取成功了!


