标签: git-submodules

在子模块中使用git rebase和移动目录

我已将子目录移动到单独的存储库中,然后将其作为子模块包含在内.

现在我想在该变化之上重新定义另一个分支.

israfel:proj almad$ git rebase -i origin/master
error: could not apply ae1fd9a... Commit message
hint: after resolving the conflicts, mark the corrected paths
hint: with 'git add <paths>' and run 'git rebase --continue'
Could not apply ae1fd9a... Commit message

israfel:proj almad$ git status
# Not currently on any branch.
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
# Unmerged paths:
#   (use "git reset HEAD <file>..." to unstage)
#   (use "git add/rm <file>..." …
Run Code Online (Sandbox Code Playgroud)

git git-rebase git-submodules

8
推荐指数
1
解决办法
8187
查看次数

git submodule add fatal:不是Git Repository

我是Git的新手,并尽我所能找到关于这个问题的一些文档无济于事.

这是我的命令:

$ git submodule add https://github.com/joliver/EventStore.git externalsource/JOliverEventStore/ 
Run Code Online (Sandbox Code Playgroud)

致命:不是git存储库:../.git/modules/externalsource/JOliverEventStore无法签出子模块'externalsource/JOliverEventStore'

我在我的回购根目录中,目前没有目录/externalsource/JO liverEventStore/.错误是谈论我不知道的目录.

如果我将子模块添加到根目录,如下所示:

$ git submodule add https://github.com/joliver/EventStore.git JOliverEventStore 
Run Code Online (Sandbox Code Playgroud)

我没有问题,它在根目录中创建了该文件夹.

任何见解将不胜感激.

git git-submodules

8
推荐指数
3
解决办法
2万
查看次数

为什么Teamcity无法下拉git子模块

我有一个有子模块的git项目.此子模块用于两个存储库,这两个存储库都构建在Teamcity服务器上.Teamcity能够构建第一个项目,但第二个项目有以下错误(详细信息已经被调整以保护有罪)

收集VCS存储库'TirePlotter'的更改时出错收集更改失败:org.eclipse.jgit.errors.CorruptObjectException:对象'git hash here'已损坏:'git fetch'命令失败.stderr:'project submodule name url':'project submodule name url'/ info/refs?service = git-upload-pack not found«隐藏stacktrace jetbrains.buildServer.vcs.VcsException:收集VCS存储库更改时的错误'TirePlotter'收集更改失败:org.eclipse.jgit.errors.CorruptObjectException:对象'git hash here'已损坏:'git fetch'命令失败.stderr:'project submodule name url':'project submodule name url'/ info/refs?service = git-upload-pack not found at jetbrains.buildServer.buildTriggers.vcs.git.OperationContext.wrapException(OperationContext.java:139)在在jetbrains.buildServer.vcs.CollectRepositoryChangesByCheckoutRulesAdapter.collectChanges(CollectRepositoryChangesByCheckoutRulesAdapter.java:5)在jetbrains.buildServer.vcs.CollectChangesBetweenRepositoriesAdapter.collectChanges(CollectChangesBetweenRepositoriesAdapter jetbrains.buildServer.buildTriggers.vcs.git.GitVcsSupport.collectChanges(GitVcsSupport.java:142) .java:6)at jetbrains.buildServer.buildTriggers.vcs.LoadChanges $ jetlectChangesInSingleRepository.perform(LoadChanges.java:2)at jetbrains.buildServer.buildTriggers.vcs.LoadChanges.perform(LoadChanges.java:60)at jetbrains.buildServer. jet的Jetbrains.buildServer.buildTriggers.vcs.LoadChanges.collectChanges(LoadChanges.java:20)中的buildTriggers.vcs.LoadChanges.collectChangesForCheckoutRules(LoadChanges.java:46)brains.buildServer.buildTriggers.vcs.LoadChanges.run(LoadChanges.java:105)at jetbrains.buildServer.buildTriggers.vcs.VcsRootChangesLoader._loadChanges(VcsRootChangesLoader.java:31)at jetbrains.buildServer.buildTriggers.vcs.VcsRootChangesLoader.loadChanges( VcsRootChangesLoader.java:43)at jetbrains.build.vcs.impl.VcsChangesLoaderImpl.doLoadChanges(VcsChangesLoaderImpl.java:94)at jetbrains.bucs.impl.VcsChangesLoaderImpl.loadChangesNoLocking(VcsChangesLoaderImpl.java:16)at jetbrains.buildServer.vcs .impl.VcsChangesLoaderImpl.loadChanges(VcsChangesLoaderImpl.java:133)at jetbrains.buildServer.vcs.impl.VcsManagerImpl.loadChanges(VcsManagerImpl.java:604)at jetbrains.buildServer.serverSide.impl.auth.SecuredVcsManager.loadChanges(SecuredVcsManager.java) :72)at jetbrains.buildServer.serverSide.impl.VcsModificationChecker $ 1.run(VcsModificationChecker.java:11)​​at java.util.concurrent.Executors $ RunnableAdapter.call(Unknown Source)at java.util.concurrent.FutureTask $ Sync. innerRu 来自java.util.concurrent.ThreadPoolExecutor的java.util.concurrent.FutureTask.run(未知来源)的n(未知来源)java.util.concurrent.ThreadPoolExecutor上的$ Worker.runTask(未知来源)$ Worker.run(未知来源) )在java.lang.Thread.run(未知源)引起:org.eclipse.jgit.errors.CorruptObjectException:对象'Git hash here'已损坏:'git fetch'命令失败.stderr:'project submodule name url':'project submodule name url'/ info/refs?service = git-upload-pack not found …

git teamcity github git-submodules

8
推荐指数
2
解决办法
1万
查看次数

无法使用子模块从分支机构检出主分支

我的repo中有一个目录(称之为blah),其中包含一些我从另一个repo(repo-blah)手动复制的文件.有一天,我决定变聪明并将这个blah目录作为一个子模块,这样我就不必在他们改变时手动重新复制文件repo-blah,这样我就可以在我的仓库中对这些文件进行更改并且有一个gitish更新方式repo-blah.

我一直在使用master分支,所以我创建了另一个分支sub-blah-branch,在那里我从索引中删除了blah目录:

$ git rm -r blah
Run Code Online (Sandbox Code Playgroud)

然后为它创建一个子模块:

$ git submodule add uri/to/repo-blah blah
Run Code Online (Sandbox Code Playgroud)

我承诺一切,并确保回购清洁:

$ git status
# On branch sub-blah-branch
nothing to commit (working directory clean)
Run Code Online (Sandbox Code Playgroud)

然后,虽然对所有这些子模块的东西感觉非常酷,但我尝试检查主分支.但我明白了:

$ git checkout master
error: The following untracked working tree files would be overwritten by checkout:
    blah/[every file that I had manually copied from repo-blah]
Please move or remove them before you can switch branches.
Aborting
Run Code Online (Sandbox Code Playgroud)

Pro Git关于子模块的章节告诉我,当从已创建子模块的分支切换时,这些子模块的内容不会自动删除,而是在repo切换分支后变为未跟踪.在这种情况下,我不能切换到 …

git git-submodules

8
推荐指数
1
解决办法
1279
查看次数

unity3d和git子模块有可能吗?

TLDR; 这将是一个冗长的帖子,但我相信你们中的许多unity3d开发人员也遇到了同样的问题.一个需要明确确定,一劳永逸的答案来拯救我们的集体理智的问题.

所以我在过去2年多的时间里一直在使用git,但我并没有深入研究它.我可以从bitbucket/github等分支/合并推拉,这适用于常规的win表单/传统应用程序.

这是问题所在.我早已从xna/silverlight转移到unity3d和unity,以便添加对库的引用,实际上你必须将源文件从该库复制到unity项目文件夹中.尽管unity允许您将*.dll文件放入Plugin文件夹,但是存在明显的跨平台兼容性问题,因此我从不想去那里.

我有十几个图书馆项目,提供从人工智能到内容管理,到日志记录,抽象用户输入系统等的各种功能.我一直在为我将要制作的未来游戏开发一个新的关卡编辑器.

每个单独的库项目都是一个统一项目,每个项目的代码文件都是统一组织的

Assets\<company name>\<project name>\
Assets\<company name>\<library name>\
Assets\<company name>\<another library name>\
Run Code Online (Sandbox Code Playgroud)

我这样做是为了保持高度有序的组织,这与团结资产商店中的许多其他资产不同.:(

所以我的关卡编辑器项目正在使用多个库项目,其代码已通过复制粘贴导入.每个库本身都托管在自己的本地git存储库中.因此,当我将代码文件从库项目粘贴到我的主统一项目时,我会自动失去任何提交我对该库git repo所做的更改的能力.

去年我一直在做的就是休息

  1. 启动一个主项目 Assets\<company name>\<main project name>\
  2. 导入任何库项目(复制/粘贴代码文件) Assets\<company name>\<library name>\
  3. 如果我需要对其中一个库进行更改,我通常只编辑我正在处理的主项目中的库代码文件.(否则会产生更多复杂性)
  4. 因为主项目也是一个git repo,我对任何库文件所做的更改也会被提交到主项目的repo.
  5. 过了一会儿,我使用CodeCompare(一个diff实用程序)Assets\<company name>\<library name>\与我之前复制库文件的库的原始位置进行文件夹比较.
  6. 我通过diff精心比较每个更改的代码文件差异,并将我的主项目中所做的更改迁移到库的原始位置.
  7. 现在已经完成了,库是一个git repo所以再次(第二次)我必须提交有关对代码文件进行的各种更改.

伴随着这种精神错乱,还有另一个问题.主要项目不是我现在唯一的主要项目.我有一些项目都引用(通过复制/粘贴)这些其他库.所以现在我已经更新了库的代码并提交了它,我现在必须回顾每个使用库的主项目,并将库git repo的更改复制/粘贴到那些主项目.

工作流程总结

MainProjectA->从LibraryA-> LibraryA文件中复制的代码文件在MainProjectA-> LibraryA文件中修改,通过diff比较合并回原始LibraryA文件夹位置 - > LibraryA代码文件,然后复制回使用LibraryA IE的其他项目:MainProjectB,MainProjectC,MainProjectD .

好主!随着我的各种项目变得越来越大,这个问题变得越来越复杂.这个系统有效,但非常繁琐.

幕间休息

所以有点短暂的咆哮./ TakesDeepBreath /叹息我拒绝使用git命令行.它是MS-DOS ala 1980年代的怪诞.这是20个怪人14人.2014年和我们的开发人员仍在使用命令行.在这个时代,我期待更多.我基本上不是在学习一种全新的命令行语言,更不用说在Windows和应用程序之间切换回第四,只是为了做一些基本上简单的事情,比如提交代码更改.只需2-3次快速鼠标点击和短消息即可完成的任务.git = new hawtness +不必要的命令行复杂性

话虽如此,我经常使用内置的vs2013 git功能进行提交和分支/合并等.但据我所知,它似乎不支持子模块.所以我使用SourceTree.

结束中场休息.

输入git submodule地狱

就像我说的那样我还没有使用git超出它的基本核心功能而且我只通过测试项目进行了初步测试但是我不能让git以我需要的方式可靠地工作,并且经常在使用子模块时有点混乱,而且由于各种错误,它往往不会提交.

我想做的就是这个

  1. 创建一个名为MainProjectA的新统一项目,并使其成为本地仓库
  2. 从LibraryA(本地仓库),LibraryB(本地仓库)等向MainProjectA添加git子模块
  3. 如果我对MainProjectA中与LibraryA相关的代码文件进行更改,我希望能够将这些特定更改从MainProjectA中提交回LibraryA的repo.

我甚至已经开始编写一个实用程序,它会在检测到更改后自动在两个不同文件夹之间同步文件.但我放弃了它,因为虽然它可以解决同步问题,但它无法解决git提交问题.

另一个问题是我所有拥有本地回购的现有统一项目都被设置为休耕

<Unity Main Project Folder>
  |- .git …
Run Code Online (Sandbox Code Playgroud)

git unity-game-engine git-submodules

8
推荐指数
2
解决办法
4211
查看次数

Git:将子目录转换为子模块

我已经成功地使用命令(例如这两个示例中概述的方法)将子模块转换为子目录:

Submodule-> SUBDIR

Subdir->子模块

挑战是在目录上成功实现此目的,通过每次转换保留其历史记录.
上面列出的这两种方法在一个简单的实验存储库上运行良好,但不处理更复杂的存储库.例如,具有任意提交模式的repo.

执行时问题会暴露出来

git filter-branch --subdirectory-filter <lib-directory> -- --all

尝试将目录(以前是子模块)转换为子模块时.如果我理解正确的话.这是扔:

Rewrite c95281d27e4602e9af50146eefcf7c28f5bb4f35 
        (2/11)a989b207d3757f9803fd50fa2d77908a4dc1330e
fatal: failed to unpack tree object 
       c95281d27e4602e9af50146eefcf7c28f5bb4f35:lib/test_submodule
Could not initialize the index`
Run Code Online (Sandbox Code Playgroud)

其中绝对没有类似的结果在线.
据认为,这是由于对INDEX中子模块的重复引用而发生的,因此当转换子模块时,会发生上述错误.

有没有办法执行一个filter-branch允许避免这些早期的子模块引用?

编辑:我再次回来看这个问题,我仍然没有找到解决方法.使用Subdir-> Submodule方法git filter-branch可以正常用于普通目录; 但碰到子模块时会崩溃.git中此部分发生的崩溃:

https://github.com/github/git-msysgit/blob/master/git-filter-branch.sh#L300

但是我对此无法理解.

git git-submodules

8
推荐指数
1
解决办法
1565
查看次数

在Makefile中自动初始化和更新子模块

我有一个带有几个子模块的git项目(回想起来我有点后悔的选择).它使用gnumake

目前,我希望人们在第一次构建项目之前手动发布git submodule update --init1,并且在提取任何更新子模块引用的更改之后.

但是,我希望Makefile在需要时自动发出这些命令.如果他们有时在不需要时发出命令(虚假更新),这是可以的 - 但它不应该经常发生.

对于初始init,似乎有足够的规则(对于存在于目录中的子模块module1:

module1/.git:
    git submodule update --init
Run Code Online (Sandbox Code Playgroud)

在这里选择.git作为"表示"子模块的文件是相当随意的,它可能是一些其他文件.

但是,在更新引用时更新子模块效果不佳.我想我可以让子模块依赖于根.gitmodules文件,我想在子模块引用更新时应该更改,例如:

module1/.git: .gitmodules
    git submodule update --init
Run Code Online (Sandbox Code Playgroud)

这里使用.git似乎是错误的:可能是在update运行时不一定直接更新(特别是如果没有更新此特定子模块),这将使更新命令每次都运行.

在这里寻找更清洁的解决方案.


1或者可能--recursive在初始化上使用参数clone,这具有相同的效果.

git makefile gnu-make git-submodules

8
推荐指数
1
解决办法
560
查看次数

如何使用子模块克隆本地存储库?

假设我递归地克隆一个存储库。

$ git clone --recursive ssh://server/project/client
Cloning into 'client'...
remote: Counting objects: 191, done
remote: Finding sources: 100% (191/191)
remote: Total 191 (delta 53), reused 159 (delta 53)
Receiving objects: 100% (191/191), 27.59 KiB | 0 bytes/s, done.
Resolving deltas: 100% (53/53), done.
Checking connectivity... done.
Submodule 'gui' (ssh://server/project/client/gui.git) registered for path 'gui'
Cloning into 'gui'...
remote: Counting objects: 3213, done
remote: Finding sources: 100% (3213/3213)
remote: Total 3213 (delta 1272), reused 3107 (delta 1272)
Receiving objects: 100% (3213/3213), 47.88 …
Run Code Online (Sandbox Code Playgroud)

git git-clone git-submodules

7
推荐指数
1
解决办法
5136
查看次数

如何跳过 Python 导入中的中间文件夹?

我的 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。)

python git-submodules python-3.x

7
推荐指数
1
解决办法
1040
查看次数

如何在 GitHub Action 中使用私有子模块 git 克隆私有存储库?

我的组织(或我的用户)内有两个私有 GitHub 存储库。其中一个包含另一个作为子模块。如何克隆另一个私有存储库及其包含的子模块?

我试过

- uses: actions/checkout@v3
  with:
    submodules: true
Run Code Online (Sandbox Code Playgroud)

但是,这失败了,子模块部分出现错误消息,我是否应该添加一些权限或其他权限?

Fetching submodules
  /usr/bin/git submodule sync
  /usr/bin/git -c protocol.version=2 submodule update --init --force --depth=1
  Submodule '.github/workflows/MYPROJECT1' (https://github.com/MYUSER/MYPROJECT1.git) registered for path '.github/workflows/MYPROJECT1'
  Cloning into '/home/runner/work/MYPROJECT2/MYPROJECT2/.github/workflows/MYPROJECT1'...
  remote: Repository not found.
  Error: fatal: repository 'https://github.com/MYUSER/MYPROJECT1.git/' not found
  Error: fatal: clone of 'https://github.com/MYUSER/MYPROJECT1.git' into submodule path '/home/runner/work/MYPROJECT2/MYPROJECT2/.github/workflows/MYPROJECT1' failed
  Failed to clone '.github/workflows/MYPROJECT1'. Retry scheduled
  ... more errors
Run Code Online (Sandbox Code Playgroud)

github git-submodules github-actions

7
推荐指数
1
解决办法
5269
查看次数