我有以下项目设置
ProjectA
-- [sub moduleB]
-- file1
-- file2 etc
-- [sub moduleC]
--file1
--file2
--etc
Run Code Online (Sandbox Code Playgroud)
ProjectA是它自己的项目。子模块也是如此。每个都有自己的文件和文件夹以及 git 存储库。然而,我遇到的问题是,由于公司限制,子模块中的内容要求我通过代理连接到它。例如,ProjectA 是内部托管的,但子模块不是。将子模块视为更大应用程序的外部插件。
我目前通过手动设置代理来解决这个问题。
所以在projectA中我通过输入清除代理设置
git config --global http.proxy ""
Run Code Online (Sandbox Code Playgroud)
当我在子模块中时,我设置代理
git config --global http.proxy http://<proxy url>:8080
Run Code Online (Sandbox Code Playgroud)
我可以配置 git 以记住文件夹级别的代理吗?所以我不必一直记住(有时忘记)来运行这个配置命令。我想只做一次,然后就忘记它。
我正在尝试使用Deployment sourceAzure Web 应用程序中的选项将包含子模块的 VSTS(Visual Studio Team Services)Git 应用程序部署到 Azure 。
所有子模块都托管在同一个 VSTS 项目中,但位于不同的 Git 存储库下。
部署到 Azure 失败并显示以下错误消息:
致命:无法读取“ https://XXX.visualstudio.com ”的用户名:错误的文件描述符\n将“ https://XXX.visualstudio.com/defaultcollection/Project/_git/Project.API.Models ”克隆到子模块中路径“lib/api-models”失败\n\r\nD:\Program Files (x86)\Git\cmd\git.exe 子模块更新 --init --recursive
有什么方法可以将包括子模块在内的 Git 项目部署到 Azure?
git azure git-submodules continuous-deployment azure-web-app-service
我可以使用哪些函数将所有子模块(本地 repo)同步/初始化/更新到远程分支中的版本?
“同步”(我们称之为,我不是说 git sync!)也必须在以下情况下工作:
本质上,我希望本地 repo 始终与远程分支的版本完全相同。每当我更改子模块中的某些内容时,都无需过多摆弄。所以没有手动ssh'ing到服务器来初始化一个新的子模块,只为了部署脚本工作......
这可以在不克隆(又名传输)整个存储库的情况下实现吗?我选择 git 是为了有一种安全、快速的方式来部署我的源代码。但我能想到的唯一选择是git clone --recursive在它们各自的标签下做一个完整的和检查子模块。在这种情况下,rsync 可能会在同步文件方面做得更好。
一些个人背景:我以前使用过 git 子模块,但说实话,我不是粉丝,完全接受这可能是我对它们工作方式的细微差别的无知。当我之前将它们用于共享库时,我git pull在子模块中使用 a 提取更新,然后modified … (new commits)在父模块中显示。我得到这个-我已经改变了提交的指针.git沿着这些线路的元数据,或什么的,我需要commit和push父回购这种变化,所以它用正确的子模块相关的承诺。
我的问题:我现在有一份新工作,我从事的项目有一个子模块。它不是共享库 - 构建过程依赖于一些凭据,出于安全原因,这些凭据每天更新并通过子模块分发。所以每天都有一个拉取更新的过程,它发生在git submodule update --remote.
两个奇怪的地方:(1)子模块永远处于分离头状态;(2)status父模块保持干净,子模块没有变化。
那么为什么这是一个问题呢?问题是,我的拉取请求与“已更改文件”列表中的子模块一起显示。我不认为这实际上会导致问题,但一位同行评审员对这些变化有特别的例外,因为它们不应该存在。由于子模块从未在git status输出中显示为已修改,因此我不知道我如何提交任何更改,以及如何阻止它。
(这是 GitHub 中的私有存储库 - 我有一个分支,并且正在我的分支的一个分支中工作。子模块仍然指向未分支的主存储库。)
(显然这在其他一些开发人员的 PR 中也很明显,但不是在每个 PR 中。)
我是这家公司的新手,我可以不用被描绘成无法正常进行版本控制的人!但是我需要一个比我更具有 git 智慧的人来告诉我发生了什么。
(就我个人而言,我的解决方案是不使用 submodule,这可能不在我的控制范围内。)
所以我有 1 个项目的 11 个存储库,它们都是微服务。
我有一个名为 DevOps 的存储库,其中必须跨 YAML 构建共享的所有内容都使用 Git 子模块共享。
出于某种原因,我似乎无法引用 git 模块中的 yaml 模板。
选项:
当我尝试通过触发器或手动运行构建时,出现错误:
在存储库http://A.azuredevops.local/DefaultCollection/A/_git/A 分支 refs/heads/master 版本 db2884cc2d188b8e281f78e8b27e4fd74ce77d58 中找不到文件 /DevOps/A/Templates/A-test-template.yml,未 预期的步骤类型。 '步骤模板参考'
YAML:
steps:
# Run Unit Tests
- template: DevOps/A/Templates/A-test-template.yml
Run Code Online (Sandbox Code Playgroud)
解决方案:
使用 YAML:
resources:
repositories:
- repository: RepositoryAlias
type: git
name: "ProjectName/RepositoryName"
steps:
- template: DevOps/A/Templates/A-test-template.yml@RepositoryAlias
Run Code Online (Sandbox Code Playgroud) git yaml git-submodules azure-devops azure-devops-server-2019
太棒了;如何知道我当前的工作目录位于子模块目录内?
如果在子模块内部或外部工作,工作流程会有所不同。我一次又一次地感到困惑,因为我不知道我在子模块内。
最好__git_ps1会告诉我我位于子模块内,但显然它没有这样做的规定。
我想修补以__git_ps1向我展示我位于子模块内的事实,但我找不到一种优雅的方法来查询 git 以了解该事实。
理想情况下,我希望有一个像这样的 shell 函数:
function current_working_directory_is_in_a_submodule() {
if some_magic; then
echo "( $submodule_name )"
else
false
fi
}
Run Code Online (Sandbox Code Playgroud)
什么是some_magic?
我正在重新组织我的点文件并具有以下目录结构:
\n\ndotfiles\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .vim\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 colors/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 ftplugin/\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pack/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 my_plugins/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 opt/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 nerdtree/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .git\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vimwiki/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .git\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 start/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 fugitive/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .git\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 syntastic/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .git\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 vimade/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .git\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vim-css-color/\n\xe2\x94\x82 \xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 .git\n\xe2\x94\x82 \xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 README.md\n\xe2\x94\x82 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 vimrc\nRun Code Online (Sandbox Code Playgroud)\n\n有 6 个目录是 github 存储库,并且已经克隆到它们的目录中。
\n\n我现在想要控制整个 dotfiles 目录版本。\n如何添加这六个.../.git存储库作为子模块添加到顶级存储库,而无需重新克隆包。
我正在尝试克隆此存储库: https://github.com/Electronicarts/EASTL 但几乎所有子模块都将此存储库添加为子模块!(参见: https: //github.com/electricarts/EASTL/tree/master/test/packages)
这会创建无限递归,并永远保持克隆。
这个问题有解决办法吗?!
我在向 Android 项目添加子模块时遇到问题。我已经尝试了在线提供的所有教程和一些解决方案,但没有一个确切说明如何添加子模块并使您的提交与主存储库同步。
我尝试过的解决方案:
要解决此问题:我implementation project(':Tools_Demo_App')在 build.gradle 依赖项中添加了它,然后它显示了此错误。

然后,如果我添加include ':Tools_Demo_App'到我的settings.gradle。此错误消失。
但我仍然无法添加活动。它说“Java 文件位于源根目录之外”。
假设在克隆我的存储库之前,我已经想将其添加为子模块,现在我将其添加为项目中的模块。它解决了无法添加活动的问题。但在这里,问题是它没有作为子模块添加,因此我所做的所有更改都没有反映在我的主存储库中。无论我做什么,到目前为止,网上提供的教程都没有帮助。如果您使用过子模块并且能够使用它们使所有内容与主存储库保持同步,请提出一些建议。
我实际上想要做什么:
主要项目:子模块:演示我想保留演示存储库作为基本应用程序来保留我的所有设计、库和模板,以便我可以将此子模块添加到我的所有项目中,然后从这里选择可重用的东西,而不是每次都重写所有内容。
我有一个包含几个子模块的 git 存储库(请参阅示例)。它的结构如下所示:
I--A--B <- main
\
C <- branch-c
Run Code Online (Sandbox Code Playgroud)
submodule-asubmodule-bsubmodule-con 分支branch-cgit clone --recurse-submodules <URL>当我仅使用submodule-a和子模块克隆上述存储库时,
子submodule-b模块将被初始化并克隆。
branch-c当我想使用来检查分支时git checkout branch-c,会创建 的目录submodule-c,但子模块本身并未初始化。命令输出中没有指示需要执行一些额外步骤。既不git status给出git diff任何提示。
相反,当我想branch-c使用它进行检查时git checkout --recurse-submodules branch-c,出现错误:
fatal: not a git repository: ../../.git/modules/subrepos/subrepo-c
fatal: could not reset submodule index
Run Code Online (Sandbox Code Playgroud)
如何branch-c在自动初始化所有子模块的同时签出(或切换到)分支?
我想要这样的东西:
git submodule foreach --recursive git checkout some_feature_branch || git checkout develop
Run Code Online (Sandbox Code Playgroud)
所以如果some_feature_branch存在的话我想检查一下develop。是否可以使用内置git或bash命令来实现?
我有一个存储在 git 中的主应用程序。在该应用程序中,我们使用托管在github上的第三方组件。我们对此组件进行了大量自定义,因此认为为了使更新更容易,我们应该将该组件添加为子模块。
据我了解,通过将此组件添加为子模块,我们将能够从github 提取上游更改并将其合并到我们的子模块中。然后我们会将这些更改推送到我们的git 中。
我成功地将组件添加为子模块,并将其克隆到我的应用程序的目录中。我已经合并了所有修改,并在本地提交了这些修改。
我的问题是,现在如何将 git 添加为子模块的远程,以便我可以将所有自定义推送到该服务器?
我有一个git存储库(我将其称为ml)位于
ssh://ml-fey/usr/projects/data/nuclear/mc/type1
Run Code Online (Sandbox Code Playgroud)
该存储库有一个子模块.该.gitmodules文件看起来像这样
[submodule "Appendix"]
path = Appendix
url = /usr/projects/data/nuclear/mc/type1/Appendix
Run Code Online (Sandbox Code Playgroud)
我可以将存储库克隆到新的存储库(我将其称为XL),但是当我尝试更新子模块时,我收到此错误
$ git submodule update
Cloning into 'Appendix'...
fatal: '/usr/projects/data/nuclear/mc/Appendix' does not appear to be a git repository
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
Clone of 'ssh://ml-fey/usr/projects/data/nuclear/mc/Appendix' into submodule path 'Appendix' failed
Run Code Online (Sandbox Code Playgroud)
请注意,搜索Appendix子模块的type1目录缺少最终目录.git无法更新子模块的原因XL是因为ssh://ml-fey/usr/projects/data/nuclear/mc/Appendix不存在.type1去哪儿了?
存储库的.gitmodules文件XL如下所示:
[submodule …Run Code Online (Sandbox Code Playgroud) git ×13
git-submodules ×13
github ×3
shell ×2
android ×1
azure ×1
azure-devops ×1
bash ×1
clone ×1
deployment ×1
git-checkout ×1
gitlab ×1
proxy ×1
pull-request ×1
repository ×1
settings ×1
webhooks ×1
windows ×1
yaml ×1