标签: git-submodules

如何更新包含子模块的git仓库?

过了一段时间我想更新我的git repo,然后出了点问题.出现这种情况的正确方法是什么?

mblsha@siruba:~/src/psi/ $ git status
iris: needs merge
# On branch master
# Changes to be committed:
#   (use "git reset HEAD <file>..." to unstage)
#
#   modified:   src/common.cpp
#
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#   unmerged:   iris
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   gupdate.sh
mblsha@siruba:~/src/psi/ $ git submodule status
+cf237ef8f3d9dc058dbde47e6973e6388608ce60 iris (heads/master)
+cf237ef8f3d9dc058dbde47e6973e6388608ce60 iris …
Run Code Online (Sandbox Code Playgroud)

git git-submodules

5
推荐指数
1
解决办法
6156
查看次数

与git子模块共享一个工作树

假设我有一个库Common,可以使用独立的,并且所使用的项目P1和P2,因此,树我想要的样子

/Common/.git
        ...
/P1/.git
    .gitmodules  # points to remote server
    Common/
    ...
/P2/.git
    .gitmodules  # points to remote server
    Common/
    ...
Run Code Online (Sandbox Code Playgroud)

当我进行更改时/Common,我希望能够在提交之前P1和P2之前测试它.使用通常的git submodule命令集,我将不得不提交/Common,推送到远程,然后从两个/P1/Common和/P2/Common.如果提交中断了某些内容,则无法修改,因为已经发布了错误的更改.或者,我可以git remote add quicktest /Common在/P?/Common不触摸远程服务器的情况下拉动.但是这有很多不一致的机会,并且删除破坏的提交是很脏的,/P?/Common以便可以修改它们/Common.

我宁愿认为,在开发过程中,从工作树/Common被使用P1和P2,但我不能让/P1/Common一个符号链接/Common,因为git submodule识别符号链接从目录不同.大多数文件系统不允许使用硬链接目录.我可以使用硬链接所有文件

rm -rf /P1/Common
cp -rl /Common /P1/Common
Run Code Online (Sandbox Code Playgroud)

/Common在添加新文件之前效果很好,在这种情况下需要重复此过程.两者都有优雅的方式吗?

  1. 继续git …

git git-submodules

5
推荐指数
1
解决办法
686
查看次数

如何使用git和buidout在没有符号链接的情况下使用共享子应用程序构建python项目

我有多个项目与其他项目共享子应用程序.在项目目录中工作时,我希望能够对应用程序进行更改,更新它,并将这些更新提取到第二个项目中.

需求:

  • 不使用符号链接(我的IDE的调试器不适合它们)
  • 没有编译/重新运行脚本.我想对应用程序进行更改,而无需重新运行脚本/ buildout.
  • 应用必须位于项目文件夹中.

这是结构:

app_one (git repo)
  |-- app_one (actual app uses by projects)
  |   +-- models.py
  |-- README.md
  +-- setup.py

project_one  (git repo)
  |-- project_one
  |   |-- apps
  |   |   |-- app_one
  |   |   |   +-- models.py
  |   |   | -- app_two
  |-- setup.cfg
  +-- setup.py

project_two  (git repo)
  |-- project_two
  |   |-- apps
  |   |   |-- app_one (same app …
Run Code Online (Sandbox Code Playgroud)

python git buildout git-submodules git-subtree

5
推荐指数
1
解决办法
1175
查看次数

如何使用'git filter-branch'更新子模块的SHA?

假设我有两个Git存储库,A和B. B是A的子模块.

为了简单起见,我们还假设我有一个神奇的函数get_sha_B,给定来自A的SHA提交,返回B的所需SHA提交.

如何在repo A上运行filter-branch,以便重新编写repo A的每个提交以指向所需的repo B提交,如get_sha_B?

谢谢!

git git-submodules git-filter-branch

5
推荐指数
1
解决办法
303
查看次数

Git子模块新版本更新

我已经分叉了MapBox-ios-sdk并对其进行了一些更改.更新版的sdk就在这里,我将更改合并到了fork中.MapBox-ios-sdk还包含SMCalloutView,它是MapBox-ios-sdk中的子模块.然而,官方sdk的版本使用了更新的,更新的SMCalloutView,它不在我的分支中.

我如何让它更新

我用这里的说明更新了我的sdk .但是,这不会更新SMCalloutView.我也尝试过git submodule update --recursiveMapBox-ios-sdk的级别,没有任何反应.事实证明,这是因为SMCallOutView处于"无分支"状态.为什么它在"没有分支"?如何将所有子模块置于"无分支"状态之外?如果它处于"无分支",那么我永远不会知道需要更新的子模块(或甚至更多嵌套)的子模块或子模块.

git git-submodules

5
推荐指数
1
解决办法
5343
查看次数

使用gnu make正确构建git子模块

我目前正在尝试编写一个Makefile,以正确构建包含git子模块的项目。该子模块具有自己的makefile集,并一次生成多个目标,包括一些库。

此Makefile应该具有以下属性。

  • 即使使用并行构建,也不要两次重建子模块。
  • 子模块代码已更改时更新子模块目标(可能是因为我浏览了主存储库的修订版)。
  • 子模块库更改后,重新链接主项目。
  • 不要在顶层项目中复制粘贴子模块的Makefile(即保持Makefile递归)。

只是为了设定想法,这似乎是可行的。

FOO_SUBDIR := $(CURDIR)/foo
LDFLAGS := -L$(FOO_SUBDIR)

FOO_LIBSFILES := $(FOO_SUBDIR)/libfoo.a $(FOO_SUBDIR)/libgnufoo.a
FOO_LDLIBS := -lfoo -lgnufoo


.PHONY: all
all: main

# There are theoretically 3 main binaries
main: main.c $(FOO_LIBSFILES)
    gcc -o $@ $< $(LDFLAGS) $(FOO_LDLIBS)

$(FOO_LIBSFILES): libfoo
    @# Do nothing

.PHONY: libfoo
libfoo:
    $(MAKE) -C $(FOO_SUBDIR)
Run Code Online (Sandbox Code Playgroud)

我添加了空食谱似乎很有效,但我不明白为什么。

这个想法是始终依靠子模块的Makefile进行重建(或不重建)libfoo.a和libgnufoo.a,并让主Makefile决定是否main需要重建。没有空食谱,它是行不通的。当foo/foo.c被修改,然后libfoo.a重新生成,但make不重建main。

我有一种空的配方强制检查目标文件的日期的感觉。但是我找不到有关此行为的文档。

这是正确的方法吗?我应该注意的任何陷阱?还有什么比较晦涩的方法吗?或有关此行为的任何文档?

提前致谢。

git makefile gnu-make git-submodules

5
推荐指数
1
解决办法
1917
查看次数

Windows上Jenkins的git插件不使用带子模块的凭据

我在Windows上使用git与Jenkins有问题,我可以使用ssh凭据从BitBucket获取git存储库,但是当它尝试获取同一帐户上的子模块存储库时,我获得了权限异常.

从git@bitbucket.org获取上游更改:mycomp/at.git

C:\ CI\Git\bin\git.exe - 使用GIT_SSH设置凭证Bitbucket密钥C:\ CI\Git\bin\git.exe fetch --tags --progress git@bitbucket.org:mycomp/at .git + refs/heads/:refs/remotes/origin / C:\ CI\Git\bin\git.exe rev-parse"origin/ci ^ {commit}"签出修订版a079842300ba7fc9e6f4e7182c94af2cfc3af0ba(origin/ci)C:\ CI\Git\bin\git.exe config core.sparsecheckout C:\ CI\Git\bin\git.exe checkout -f a079842300ba7fc9e6f4e7182c94af2cfc3af0ba C:\ CI\Git\bin\git.exe rev-list a079842300ba7fc9e6f4e7182c94af2cfc3af0ba C:\ CI\Git\bin\git.exe远程C:\ CI\Git\bin\git.exe子模块init C:\ CI\Git\bin\git.exe子模块同步C:\ CI\Git\bin\git.exe config - -get remote.origin.url C:\ CI\Git\bin\git.exe子模块更新FATAL:命令"C:\ CI\Git\bin\git.exe submodule update"返回状态码1:stdout:stderr:Cloning进入'include/portal_air'...权限被拒绝(publickey).致命:无法从远程存储库读取.

Please make sure you have the correct access rights
and the repository exists.
Clone of 'git@bitbucket.org:mycomp/portal_air.git' into submodule path 'include/portal_air' failed

hudson.plugins.git.GitException: Command "C:\CI\Git\bin\git.exe submodule update" returned status code 1:
stdout: 
stderr: …
Run Code Online (Sandbox Code Playgroud)

git git-submodules jenkins

5
推荐指数
1
解决办法
1330
查看次数

将mercurial repo与子存储库迁移到git,保留历史记录的最佳方法?

我正在尝试将mercurial存储库迁移到git,但问题是mercurial存储库有子存储库(一些有分支),还有很多合并和分支本身.我希望最终的git存储库能够保留所有这些历史记录,并且在检出存储库或其他分支的早期部分时是正确和完整的.我不需要新的存储库有子模块或子树,虽然我也会接受使用它的解决方案.我看到的一些方法将新repo顶部的所有子站点合并为分支,这意味着过去的签出不包含子目录中的所有文件.我也尝试将所有内容导入为分支,将头部重置为过去,合并和重新定位,但是有太多的合并并且出现了许多冲突,即使使用--preserve-merges,所以我宁愿避免这种情况.我也找不到任何方法在git中复制mercurial子库更新历史作为子模块更新历史记录.有没有人有任何想法?谢谢.

migration git mercurial git-submodules mercurial-subrepos

5
推荐指数
1
解决办法
1291
查看次数

使用git和CMake的C++:如何使用特定参数构建子模块?

考虑一个在git存储库中组织的C++项目.假设git存储库有一个子模块,从该子模块构建(超级)项目所​​依赖的库.如果(超级)项目不仅依赖于库而且依赖于使用特定(CMake)参数构建的库,那么在构建(超级)项目时如何确保使用这些参数构建子模块?

c++ git cmake git-submodules

5
推荐指数
1
解决办法
2925
查看次数

导入子模块时,Python导入中断

我感到困惑的是我还没有找到一个问题,因为这似乎是很普遍的情况。我可能忽略了它。存在类似的问题(例如这一问题),但是它们似乎都有不同的目标和约束。

我正在编写将另一个项目用作git子模块的代码。(简化的)情况如下所示:

.
??? A.py
??? sub
    ??? B.py
    ??? C.py
Run Code Online (Sandbox Code Playgroud)

文件的内容如下;

py

import sub.B

print(sub.B.x)
Run Code Online (Sandbox Code Playgroud)

py

import C

x = C.y * 2
if __name__ == '__main__':
    print(x)
Run Code Online (Sandbox Code Playgroud)

py

y = 7
Run Code Online (Sandbox Code Playgroud)

当我尝试执行时A.py,它告诉我:

  File "/Users/Joost/poc/sub/B.py", line 1, in <module>
    import C
ImportError: No module named 'C'
Run Code Online (Sandbox Code Playgroud)

自然,当我修改B.py为Cfrom 实际得到时,它就可以正常工作sub.C。但是,就像sub第三方的子模块一样,我无法做到这一点。而且,它将破坏子模块的功能。

解决这个问题的正确方法是什么?

python git-submodules

5
推荐指数
0
解决办法
248
查看次数