git操作
gitee为例
新建仓库并拉取到本地
在gitee上新建仓库后
我们点击这个橙色的克隆、下载
选择HTTPS的链接进行复制
我们创建一个test目录并cd进去
我们就可以把远端仓库拉取下来:
git clone
后面带上刚才复制的链接
现在test目录下就有我们拉取下来的仓库了
但是我们感觉好像并没有看到仓库,ls -al
才能看到
,git就是新建的仓库,叫做隐藏的本地仓库。
在网站上其实我们也看不到这个.git
tree一下发现.git里面包含的东西其实还挺多的。
这里面是我们历史上所有的修改记录。
我们不同版本的修改数据都会保存在git特定的目录下,一般是objects
其实我们的git在记录时,不需要记录不变的。
git只会提交变化的部分。
假如我们从100行里删了1行代码,git只需要记录删除了第99行这样的字符串。
如果未来我们想恢复,把"删除"改成"添加"这一行。
加进本地仓库
我们在拉取下来的目录merge_class_delete里创建一个文件test.c并在其中编写代码:
但是这个test.c是并没有在本地仓库管理起来的。
git add .
可以把当前目录下所有陌生的文件添加到本地仓库。
也可以git add test.c
或git add test *
但这样还不算是完全添加到仓库里了
(我们要厘清当前工作区域.git的概念)
当我们add之后其实只是添加到了一个临时的暂存区里面:
那么这个暂存区的作用是什么呢?
这个暂存区允许我们多次添加,一次一起提交到git仓库。
多次add,一次提交。
第二个理由是暂存区可以恢复,后悔提交。
怎么看现在是什么状态呢?
git status
提交到本地仓库
git commit -m "......"
-m后面跟的是日志信息,或者说是提交日志信息。
这个信息建议不能乱写,要写本次提交做的核心工作。
因为git log就能看提交记录
这里的commit后面的是提交id。表示一种唯一值,相当于我们前面说的v1 v2 v3
将远端仓库与本地同步
git push
会要求我们输入gitee的用户名和密码
然后就可以看到
在gitee上面就能看到我们刚push的代码了,就完成了同步。
如果我们不小心删掉了本地仓库,此时就可以再次克隆远端仓库到本地了:
所以以上这就是git的三板斧
补充细节
1.git命令行安装
sudo yum install -y git
(centos)
sudo apt install -y git
(ubantu)
这样是说明已经装了
或者which git
2.git首次使用要求输入username,email
所以在git log
后我们可以在Author这里后面看到用户名和邮箱
3.git提交只保存头、源文件
不保存临时文件,也就是只管理后缀为.h .cpp .c这些的文件。
所以在我们构建仓库时有个.gitignore
它就是用来做这个的,帮我们进行本地文件后缀过滤。
如果在这个配置信息里出现的后缀格式,在add commit push的时候都不会被提交。
vim .gitignore
我们可以将其打开
这些配置信息里出现的后缀的文件既不会被远端仓库托管,也不会被本地仓库托管,只能算是linux环境下当前目录里的临时文件。
总之就是没有被git管理。
Windows与远端仓库
linux可以把远端仓库拉取下来,Windows上同样可以。
Windows上得装有git。
(也可以在Windows终端操作)
现在我们已经装有TortoiseGit
我们在点clone之前要先去复制我们要拉去的远端仓库的链接,然后再点clone,就会自动选中我们要的那个远端仓库。
拉取后就可以看到了。
如果现在我们在Windows里对test2.c进行修改
然后因为我们是修改这个文件而不是新建文件,所以我们直接commit
然后再push
现在我们的linux Windows 远端都有这个相同的仓库了
而刚才Windows用户修改了代码但Linux用户并不知道,在写自己的代码然后想进行上传,因为add和commit是在本地做的所以暂且还不会报错
git push之后就会报错了
rejected
那么怎么办呢?
要git pull
,将本地的仓库与远端的进行一次同步
cat test2.c
我们就能看到Windows用户做了的修改
刚才我们是在add和commit之后因为没同步没push成功的,现在git pull
完之后我们不需要重复做add和commit,直接git push
就可以。
since我们的linux用户写了个新的代码并同步到了远端,现在我们的Windows用户也出现了无法直接上传的状况。地位对等地,我们也需要先将本地仓库与远端仓库进行一次同步,然后才能再上传自己的代码。
远端仓库相比较于任何人,都是最新的。
实际操作中即使在同一个仓库也要在不同的目录下,这样冲突合并的成本最低。
可以在管理里进行仓库的删除。
对于目录,也可以进行这样的管理,操作都是一样的。