Github 是 Git 存储库的 Web 托管服务。在 Github 中,我们可以存储我们的 Repository 来存储我们的源代码并与不同的用户协作,这就是它被称为开源工具的原因。如果您了解 Git 是什么以及它如何运作的基础知识,那么充分利用 Git 对您来说可能会简单得多。在您学习 Git 时,尝试将您的精神从您可能想到的不同 VCS(例如 CVS、Subversion 或 Perforce)的事物中解放出来——这样做将帮助您在使用该设备时远离不显眼的混乱。尽管 Git 的 UI 真的很像这个不同的 VCS,但 Git 以完全不同的方式存储和考虑数据,理解这些区别将帮助您避免在使用它时感到困惑。
Github 中的子模块
另一个存储库中的目录或 Github 存储库中的子目录(例如使用其中的另一个项目)称为子模块。
就像您在存储库中工作并且希望它在您的父存储库之一中使用一样。您只需添加有关添加到主存储库的子模块的信息。此信息描述子模块指向哪个提交。现在,如果您更新子模块,它不会影响您的父存储库,因为添加时的子模块将仅在您创建该子模块时指向该提交。
因此,子模块允许您将 Git 存储库作为另一个 Git 存储库的子目录。这使您可以将另一个存储库克隆到您的项目中并保持您的提交分开。此外,更新该子模块存储库不会更新父存储库中使用的子模块。
由于子模块是根据我们的需要生成的,如果子模块通过提交更新提交,您将看到意外行为。
添加子模块
第 1 步:使用以下命令:
git submodule add https://github.com/kushagra67414/a3.git
第 2 步:运行命令:
git diff –-cached –-submodule
Note: You will notice that Git sees it as a submodule and doesn’t track its contents when you’re not in that directory. Also, it counts it as a commit of your present repository.
第 3 步:使用命令将更改添加到暂存区:
git add (add all changes file to staging area)
or
Git add (to add a specific file at staging area)
第四步:
Git commit -m “comment” [在中央创建快照]
Note: 16000 in this image implies that you’re recording a commit as a directory entry rather than a subdirectory or a file
第 5 步:将更改推送到存储库
git push ( to push changes locally to remotely )
Note: If we clone a repo having submodules in it, then it will clone submodules files/data too because git counts it as a commit of the present repository.
更新子模块
子模块不会自动更新,我们需要先获取数据并初始化我们的本地配置文件。
我们在 Github 上的存储库 a2 中添加一个文件。现在 a2 是 repo a1 的子模块
第 1 步:转到 repo a1,然后转到 a2 处的子模块
运行命令:
cd a1 and cd a2
现在我们在 a2 repo [repo a1 的子模块]
第 2 步:拉取远程完成的更改
git pull
第 3 步:现在该文件将位于您的子模块文件夹 a2 本地
记住一件事文件是在子模块 a2 中获取的,并且必须在 a1 存储库中进行更改。因为当指向子模块时,它充当存储库。现在重定向到父存储库。
第四步:查看repo a1的状态。
git status
您将看到在 a1 存储库中所做的更改未暂存,暂存并提交它以获得存储库的快照
第 5 步: git add 。 [ .意味着暂存存储库中存在的所有文件 n 文件夹]
git commit –m “comment”
第 6 步:使用命令git push
刷新你的 GitHub 你会看到变化
使用子模块克隆项目
有时,当我们使用子模块克隆项目时,包含子模块的目录,但其中没有任何文件。
子模块可以为空,也可以不为空。如果为空,则使用以下命令获取数据:
方法一:
在 git bash 中打开你的 repo 并在 bash 中重定向到你的本地存储库,然后:
第 1 步:使用命令git submodule init
这用于初始化您的本地配置文件,
第二步: git子模块更新
它的函数是从项目中获取数据
方法二:
我们可以不使用上述方法,而是使用单个命令
git clone –recurse-submodules https://github.com/kushagra67414/a1.git
这种方法的优点是它获取和更新子模块内的子模块,即嵌套子模块