git 操作

创建gitee 目录


一、 gitee创建仓库

在gitee 上点击新建仓库,项目名称和本地项目名称一致,选择初始化仓库,设置模板

二、本地操作

1.git init

创建同名目录,增加需要的文件至当前目录,然后执行 git init,会生成名为.git的文件夹

git init

2.增加源

使用git remote add origin https://gitee.com/你的码云用户名/XXXX //添加远程仓库

git remote add origin https://gitee.com/liehuodadi/ecshop_adaption

3.拉取代码

使用 git pull origin master 命令,将码云上的仓库pull到本地文件夹

git pull origin master

4.git add file

使用git add . (. 表示所有的)或者 git add + 文件名 // 将文件保存到缓存区

git add .

5.git commit -m

使用git commit -m ‘新添加的文件内容描述’ //添加文件描述

git commit -m "hello world"

6.git push

提交代码到码云

git push origin master

git svn总结
git图解

三 、gitignore

1.基本原理

本地 .gitignore 文件通常被放置在项目的根目录中。你还可以创建一个全局 .gitignore 文件,该文件中的所有条目都会在你所有的 Git 仓库中被忽略。

要创建本地 .gitignore 文件,请创建一个文本文件,并将其命名为 .gitignore(请记住在开头包含 .)。 然后根据需要编辑该文件。在每一行列出你希望 Git 忽略的文件或文件夹。

该文件中的条目也可以遵循匹配模式。

* 用作通配符匹配
/ 用于忽略相对于 .gitignore 文件的路径名
# 用于将注释添加到 .gitignore 文件

这是一个 .gitignore 文件的示例:

# Ignore Mac system files
.DS_store

# Ignore node_modules folder
node_modules

# Ignore all text files
*.txt

# Ignore files related to API keys
.env

# Ignore SASS config files

.sass-cache
要添加或更改全局 .gitignore 文件,请运行以下命令:

git config --global core.excludesfile ~/.gitignore_global

这将创建文件 ~/.gitignore_global。现在,你可以通过与编辑本地 .gitignore 文件相同的方式编辑该文件。你所有的 Git 仓库都将忽略全局 .gitignore 文件中列出的文件和文件夹。

2.如何忽略已检入的文件

有时候在 .gitignore 文件中添加规则并未生效,原因是 .gitignore 只能忽略原来没有被 track 的文件,如果某些文件已经加入了版本管理中,修改 .gitignore 是无效的。解决方法:先把不想记录文件的本地缓存删除,再在 .gitignore 中添加忽略该文件,然后再提交。

要忽略单个文件,即停止跟踪文件但不从系统中删除它,请使用:

git rm --cached filename

要忽略 .gitignore 中的每个文件:

git rm -r --cached

这将从索引(暂存区域)中删除所有更改的文件,然后运行:

git add .

提交:

git commit -m ".gitignore is now working"

三 、gitsubmodule

1. 添加submodule

1.git submodule  add  <url>  路径    
// <url> :指的是子仓库的远程地址   路径:子仓库.git相对于当前的路径
2.git commit -m "first commit "
3.git push 

2. git submodule 使用

git submodule update --init --recursive
/*一开始submodule并不在 branch 上 */
git submodule foreach git checkout develop
git submodule foreach git pull
git submodule foreach git checkout commit

3. 子模块内容的更新

对于子模块而言,并不需要知道引用自己的主项目的存在。对于自身来讲,子模块就是一个完整的 Git 仓库,按照正常的 Git 代码管理规范操作即可。

对于主项目而言,子模块的内容发生变动时,通常有三种情况:

1)当前项目下子模块文件夹内的内容发生了未跟踪的内容变动;

2)当前项目下子模块文件夹内的内容发生了版本变化;

3)当前项目下子模块文件夹内的内容没变,远程有更新;

情况1:子模块有未跟踪的内容变动

对于第1种情况,通常是在开发环境中,直接修改子模块文件夹中的代码导致的。
此时在主项目中使用 git status 能够看到关于子模块尚未暂存以备提交的变更,但是于主项目而言是无能为力的,使用 git add/commit 对其也不会产生影响。

➜ project-main git:(master) git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
(提交或丢弃子模组中未跟踪或修改的内容)
修改:project-sub-1 (未跟踪的内容)
修改尚未加入提交(使用 "git add"/"git commit -a"

在此情景下,通常需要进入子模块文件夹,按照子模块内部的版本控制体系提交代码。

当提交完成后,主项目的状态则进入了情况2,即当前项目下子模块文件夹内的内容发生了版本变化。
情况2:子模块有版本变化

当子模块版本变化时,在主项目中使用 git status 查看仓库状态时,会显示子模块有新的提交:

➜ project-main git:(master) ✗ git status
位于分支 master
您的分支与上游分支 'origin/master' 一致。
尚未暂存以备提交的变更:
(使用 "git add <文件>..." 更新要提交的内容)
(使用 "git checkout -- <文件>..." 丢弃工作区的改动)
修改:project-sub-1 (新提交)
修改尚未加入提交(使用 "git add"/"git commit -a"

在这种情况下,可以使用 git add/commit 将其添加到主项目的代码提交中,实际的改动就是那个子模块 文件 所表示的版本信息:

git diff HEAD HEAD^
diff --git a/project-sub-1 b/project-sub-1
index ace9770..7097c48 160000
--- a/project-sub-1
+++ b/project-sub-1
@@ -1 +1 @@
-Subproject commit ace977071f94f4f88935f9bb9a33ac0f8b4ba935
+Subproject commit 7097c4887798b71cee360e99815f7dbd1aa17eb4

通常当子项目更新后,主项目修改其所依赖的版本时,会产生类似这种情景的 commit 提交信息。

情况3:子模块远程有更新

通常来讲,主项目与子模块的开发不会恰好是同时进行的。通常是子模块负责维护自己的版本升级后,推送到远程仓库,并告知主项目可以更新对子模块的版本依赖。

在这种情况下,主项目是比较茫然的。

之前曾经提到,主项目可以使用 git submodule update 更新子模块的代码,但那是指 当前主项目文件夹下的子模块目录内容 与 当前主项目记录的子模块版本 不一致时,会参考后者进行更新。

但如今这种情况下,后者 当前主项目记录的子模块版本 还没有变化,在主项目看来当前情况一切正常。

此时,需要让主项目主动进入子模块拉取新版代码,进行升级操作。

通常流程是:

cd project-sub-1
git pull origin master

子模块目录下的代码版本会发生变化,转到情况2的流程进行主项目的提交。

当主项目的子项目特别多时,可能会不太方便,此时可以使用 git submodule 的一个命令 foreach 执行:

git submodule foreach 'git pull origin master'

情况汇总

终上所述,可知在不同场景下子模块的更新方式如下:

对于子模块,只需要管理好自己的版本,并推送到远程分支即可;
对于父模块,若子模块版本信息未提交,需要更新子模块目录下的代码,并执行 commit 操作提交子模块版本信息;
对于父模块,若子模块版本信息已提交,需要使用 git submodule update ,Git 会自动根据子模块版本信息更新所有子模块目录的相关代码。

4. 删除子模块

网上流传了一些偏法,主要步骤是直接移除模块,并手动修改 .gitmodules、.git/config 和 .git/modules 内容。包含了一大堆类似git rm --cached 、rm -rf 、rm .gitmodules 和 git rm --cached 之类的代码。

实际上这是一种比较野的做法,不建议使用。

根据官方文档的说明,应该使用 git submodule deinit 命令卸载一个子模块。这个命令如果添加上参数 --force,则子模块工作区内即使有本地的修改,也会被移除。

git submodule deinit project-sub-1
git rm project-sub-1

执行 git submodule deinit project-sub-1 命令的实际效果,是自动在 .git/config 中删除了以下内容:

[submodule "project-sub-1"]
url = [https://github.com/username/project-sub-1.git](https://link.zhihu.com/?target=https%3A//github.com/username/project-sub-1.git)

执行 git rm project-sub-1 的效果,是移除了 project-sub-1 文件夹,并自动在 .gitmodules 中删除了以下内容:

[submodule "project-sub-1"]
path = project-sub-1
url = [https://github.com/username/project-sub-1.git](https://link.zhihu.com/?target=https%3A//github.com/username/project-sub-1.git)

此时,主项目中关于子模块的信息基本已经删除(虽然貌似 .git/modules 目录下还有残余):

➜ project-main git:(master) ✗ gs
位于分支 master
您的分支与上游分支 'origin/master' 一致。
要提交的变更:
(使用 "git reset HEAD <文件>..." 以取消暂存)
修改:.gitmodules
删除:project-sub-1
可以提交代码:
 git commit -m "delete submodule project-sub-1"

至此完成对子模块的删除。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值