好的,我们有一个包含 3 个子模块的存储库。现在我们想将此子模块合并回主存储库,保留所有历史记录(好吧,使用子模块比有用更令人头疼)。我们该如何进行?
假设我有一个子模块dir1/dir2(通过下面显示的步骤创建)。dir2删除子模块后如何恢复它?
git submodule update抱怨子模块不存在,并git reset HEAD --hard恢复dir2但不恢复其内容。我正在以下列方式创建子模块:
mkdir dir1
cd dir1/
mkdir dir2
cd dir2/
touch 1.txt
git init
git add 1.txt
git commit -m "test"
cd ..
git init
git submodule add ./dir2/
git commit -m "adding submodule"
rm -r dir2
**** Now how do I restore dir2 and its contents? ****
Run Code Online (Sandbox Code Playgroud) 我了解到要下载带有主存储库的子模块,我们可以--recursive在克隆主存储库时使用选项。
我做了同样的 git clone --recursive git@github.com:passion/academy.git
我发现它只创建了一个子模块的空目录,但没有下载它的代码。
我们需要做额外的事情git submodule update --init --recursive 吗?如果是,那么--recursive克隆主存储库时标志的用途是什么?
StackOverflow 上提出了很多关于自动更新子模块的问题,包括:
git checkout自动执行git submodule update --recursive?但在我看来,对于 git 子模块,还没有单一的方法可以像svn up关于 svn-externals 一样工作。
所以既然git每天都在变化,我又敢再问:
有没有一种(方便的)方法来初始化和自动更新checkout 和 pull(即merge和rebase)的子模块检出(即与其相应的子模块提交 ID 保持同步)?
目前我有两种方法:
#1: 创建一个post-checkout,post-merge并post-rewrite钩住以下内容
#!/bin/sh
git submodule update --init --recursive
Run Code Online (Sandbox Code Playgroud)
正如您已经看到的那样,这种方法有几个缺点:
#2: 为pulland配置别名checkout
git config --global alias.up 'pull …Run Code Online (Sandbox Code Playgroud) 我正在开发一个包含submodules. 我在所有子模块(包括父模块)中都有同名的分支(例如master,development..),并且它们都跟踪相应的远程分支。
我想一次在所有子模块中签出相同的分支。换句话说,我想要的是,如果我切换到development父模块中的分支,所有子模块也应该切换到development分支,以便我的工作树与分支保持一致。
手动执行此操作既痛苦又重复。有捷径吗?
我们有一个为多个项目/目标提供服务的 git 存储库。此外,还有 3 个子模块用于单独开发的模块,这些模块被引用并拉入工作区。
将有一个模块的第 4 个 repo,该模块仅在特定项目中需要,并且只有特定工程师有权访问它。有什么办法可以让这个第四个子模块成为可选的或者全有或全无?
非常感谢,
伙计。
我有 git repo,在那里我使用extern/dir 中的git 子模块链接我的一些依赖项。假设我有一个依赖项A作为子模块,位于extern/A. 现在A本身有一些依赖项作为 git 子模块。InA的回购,即,例如。A/test/data/X.
现在,当我克隆我的 repo 并运行时git submodule update --init --recursive,为了在 CI 服务器上构建它,或者,我希望上面的命令忽略exter/A/test/data/X,因为它就像我不想要的 1G 数据。
然而,我的其他依赖项有一些有用的子模块,所以我不能跳过--recursive. 有没有办法做到这一点?
我的 python 应用程序的文件夹结构如下:
my_repo/
src/
main.py
util/ <-- util is a git submodule
src/
torgle.py
test/
test_torgle.py
test/
test_main.py
Run Code Online (Sandbox Code Playgroud)
在内部main.py,我可以util像这样在子模块中导入内容:
from util.src.torgle import Torgler
Run Code Online (Sandbox Code Playgroud)
但这src/只是在我的 git 子模块存储库中组织事物的一种方法,并且不应该真正成为主存储库中包名称的逻辑部分。有什么方法可以跳过src模块导入的部分吗?我宁愿这样做:
from util.torgle import Torgler
Run Code Online (Sandbox Code Playgroud)
也就是说,我可以util/src为 Pythonutil包设置别名文件夹吗?
(请注意,在我的实际情况中,我有更深层的嵌套包 ( util.x.y.z.torgle),因此from util import torgle; torgle.Torgler(...)无法很好地扩展。我对 特别感兴趣from util.torgle import Torgler。)
在我们的 Git 项目中,我们在 .gitmodules 中定义了以下内容
[submodule "DBPkg"]
path = DBPkg
url = https://MainCo@dev.azure.com/MainCo/OurProject/_git/DBPkg
Run Code Online (Sandbox Code Playgroud)
构建 Azure Pipeline 时,在“获取源”管道步骤(我使用“Azure Repos Git”)中,我启用了子模块的检出
在我们的项目设置中,我还做了以下配置...
然而,在构建项目时,当尝试使用以下命令签出子模块时,它会死掉......
2020-10-16T20:29:44.9912145Z HEAD is now at e06abce Modified docker file to remove unnecessary container name.
2020-10-16T20:29:44.9913415Z ##[command]git submodule sync
2020-10-16T20:29:44.9920288Z ##[command]git -c http.https://MainCo@dev.azure.com.extraheader="AUTHORIZATION: bearer ***" submodule update --init --force
2020-10-16T20:29:44.9923206Z Submodule 'DBPkg' (https://MainCo@dev.azure.com/MainCo/OurProject/_git/DBPkg) registered for path 'DBPkg'
2020-10-16T20:29:44.9923842Z Cloning into '/home/vsts/work/1/s/DBPkg'...
2020-10-16T20:29:44.9924246Z remote: TF401019: The Git repository with name or identifier DBPkg does not exist or you do not have …Run Code Online (Sandbox Code Playgroud) 假设我有一个git submodule并且我想在其上启用稀疏结帐。是否可以这样做并将该文件添加到存储库中以供其他克隆者使用?git 子模块被添加到,/.gitmodules但该子模块的稀疏签出文件位于.git/modules/foo/info/sparse-checkout? 如何配置 git 子模块,以便其他人克隆时--recursive只能获得白名单目录?如何将子模块上的稀疏结帐配置保存到存储库中?
git-submodules ×10
git ×9
azure ×1
git-alias ×1
git-checkout ×1
git-config ×1
git-pull ×1
github ×1
permissions ×1
python ×1
python-3.x ×1