标签: git-submodules

git子模块是在工作副本中拥有工作副本的唯一安全方法吗?

在我的场景中,我有一个程序来分析数据输入文件并生成其他数据输出文件.我想版本控制程序,我想版本控制数据文件,并且作为优先选择,我希望在程序的工作副本中拥有数据文件的工作副本.我希望程序和数据分别进行版本控制,以减少"噪音".该程序不依赖于数据文件.

如果我使用git子模块,那么当数据目录中发生事情时(我认为已提交更新),程序的版本控制会注意到子模块有更新.如果程序依赖于数据,那将是有用的,但事实并非如此.

在这种情况下,是否可以在不使用git子模块的情况下在另一个工作副本中使用工作副本?

git git-submodules

17
推荐指数
1
解决办法
3462
查看次数

在两个或多个rails应用程序之间共享代码... git子模块的替代方案?

我们有两个独立的rails_app,foo/并且bar/(有充分理由分开).它们都依赖于common/文件夹中的某些模型等,目前平行于foobar.

我们当前的svn设置用于svn:externals共享common/.本周末我们想试试git.经过大量研究,似乎解决这个问题的"犹太教"方法正在使用git submodule.我们得到了分离工作后foo,bar,common到单独的存储库,但后来意识到所有的附加条件:

  1. 在提交父级之前始终提交子模块.
  2. 在推送父模板之前始终按下子模块.
  3. 在提交之前,确保子模块的HEAD指向分支.(如果您是bash用户,我建议使用git-completion将当前分支名称放在提示符中.)
  4. 切换分支或拉动更改后始终运行'git submodule update'.

所有这些陷阱不是更复杂的是add,commit,push.我们正在寻找更简单的方法来分享commongit.这个家伙似乎已经成功使用git subtree扩展,但是与标准gitand的偏差仍然看起来并不那么简单.

鉴于我们的项目结构,这是我们能做的最好的吗?我对rails插件/引擎知之甚少,但这似乎是一种可能的RoR-ish方式来共享库.

提前致谢.

git ruby-on-rails git-submodules

17
推荐指数
4
解决办法
2972
查看次数

可以通过git子模块更新来获取子模块中的标签吗?

我有一个git存储库,它使用一个子模块,我想指向一个带注释的标签,但是当我做git submodule update新的标签时,不会被提取.我可以通过cd进入子模块并在git fetch --tags那里做一个子模块中的新标签,但我真的很想从外部完成所有这些,因为它是脚本化的.

我在git文档中找不到任何建议git submodule update包含标记的方法(我的git版本是1.7.3.5).

显然还有另一种可能性 - 将子模块指向标签指向的提交而不是标签本身,但这看起来并不整齐.

有没有办法git submodule update包含标签?

git git-submodules git-tag

17
推荐指数
3
解决办法
8672
查看次数

Git子模块 - 权限被拒绝

我无法克隆我的私有git存储库中存在的子模块.我有权访问整个存储库,

使用了以下命令但是工作,请帮忙.克隆现有存储库中子模块的正确方法是什么?

djrecker$ git submodule update --init --recursive
Submodule 'Path' (git@github.com:Path) registered for path 'App'
Cloning into 'Path'...
Permission denied (publickey).
fatal: Could not read from remote repository.
Run Code Online (Sandbox Code Playgroud)

git github git-submodules

17
推荐指数
5
解决办法
3万
查看次数

如何将WordPress自动更新与Git结合作为版本控制?

我正在尝试找到一个非常困难的任务的解决方案:正确版本控制WordPress,特别是在使用自动更新时.

WordPress允许用户只需单击按钮即可更新WordPress核心文件,主题和插件,从而实现了很多简单性.但是,当你使用像Git这样的版本控制网站时会发生什么?一旦我们点击"立即更新"按钮,我们的Git仓库就会失去同步,因此首先就会失去创建Git仓库的目的.

我一直在研究解决这个问题的方法,我能找到的是通过将组件分解为Git子模块来构建Wordpress安装的不同方法.其中一个最流行的例子是WordPress-Skeleton模板.

虽然这适用于版本控制WordPress的每个模块/组件,但它仍然不允许用户能够使用WordPress中的自动更新按钮,因为这将更新生产中的文件但不会将这些更改提交到您的Git仓库中.

在理想的世界中,我们应该能够对一个存储库中的所有文件进行版本控制,然后当我们单击"立即更新"按钮时,它应该自动更新我们的Git存储库.有谁知道如何实现这一目标?

我想到的一件事就是创建一个插件来监听更新事件,并在触发钩子后立即自动提交更改.不确定这是否是最佳方法.

如果有人有更好的方法我能做到这一点,请告诉我.

git wordpress version-control auto-update git-submodules

17
推荐指数
1
解决办法
1295
查看次数

如何在GitHub中创建嵌套存储库?

我可以通过https://github.com/(比如说repo)创建一个存储库,并具有:

https://github.com/username/repo.git
Run Code Online (Sandbox Code Playgroud)

如何创建另一个存储库(比如说sub_repo)放在下面repo并且预期有:

https://github.com/username/repo/sub_repo.git
Run Code Online (Sandbox Code Playgroud)

git github repository git-submodules

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

何时将大型Git存储库拆分为较小的存储库?

我正在努力从SVN迁移到Git.我已经习惯git-svn将历史记录放到一个git存储库中,我已经知道如何使用git-subtree将该存储库拆分为较小的存储库.这个问题不是关于如何进行迁移,而是关于何时拆分以及何时不进行拆分.

我想拆分大型存储库,因为某些目录是自包含的库,也与其他项目共享.以前svn checkout是在库上完成的,无需签出整个项目.在所有这些过程中,我发现可能有数十个目录在自己的存储库中是有意义的,因为它们是1)独立的,2)跨项目共享.

一旦你获得了一些git存储库,使用一个工具可以更容易地处理许多存储库似乎是明智的.一些例子是谷歌的repo,git submodules,git subtree,并创建自定义脚本(看来铬做到这一点).我已经探索了这些不同的方法,并了解如何使用它们.

所以问题是关于从颠覆过渡的方向.

我是否应该尝试坚持使用一个大型git存储库,只在绝对必要时才将其拆分成更小的部分,还是应该将其拆分为数十个或可能数百个较小的存储库? 哪个更容易使用?还有其他我错过的解决方案吗?如果使用多个存储库,我应该使用哪个工具?哪些因素会让某人偏爱另一种方法呢?

注意:需要在Windows,MacOS和Linux上签出源代码.

git version-control repository git-submodules git-subtree

16
推荐指数
1
解决办法
2070
查看次数

克隆包含所有子模块的git仓库

我有一个工作的git存储库,包含几个子模块(通过克隆不同的存储库获得).

现在,我想通过推送或克隆将整个存储库(包含所有子模块)复制到另一台机器上的裸git 存储库中.我很好地丢失了子模块的历史(我只是想保留它们的内容).

这可能吗 ?在我的尝试中,在克隆的存储库中子模块目录为空.

PS我知道这不是正确的工作流程(请参阅创建带子模块的公共存储库),但是不可能更新原始子模块.

git git-push git-clone git-submodules

16
推荐指数
1
解决办法
9809
查看次数

如何使用Git子模块和CMake处理传递依赖冲突?

我们有许多Git存储库,其中一些包含我们自己的代码,一些包含稍微修改过的第三方库代码.简化的依赖关系图如下所示:

  executable_A
    |     |
    |     v
    |  library_B
    |     |
    v     v
   library_C
Run Code Online (Sandbox Code Playgroud)

所以可执行文件有两个依赖项library_C,一个是直接的,一个是传递的.我希望使用Git子模块和CMake将它们组合在一起,因此简化的目录结构如下所示:

executable_A/
  CMakeListst.txt
  library_B/
    CMakeLists.txt
    library_C/
      CMakeLists.txt
  library_C/
    CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

如您所见,library_C存储库作为子模块包含两次.让我们假设两个子模块都指向同一个提交(关于如何强制执行的任何想法都是受欢迎的,但不是这个问题的主题).

我们正在使用add_subdirectory,target_link_librariestarget_include_directories管理这些相互依存关系.很标准.

问题是如果你创建一个具有相同名称的目标两次,CMake不喜欢它,所以它会抱怨:

library_C/CMakeLists.txt上的CMake错误:13(add_library):
add_library无法创建目标"library_C",因为已存在具有相同名称的另一个目标.现有目标是在源目录".../library_B/library_C"中创建的静态库.
有关更多详细信息,请参阅策略CMP0002的文档.

我宁愿不删除executable_Aon 的直接依赖library_C,因为它被拉入via的事实library_B是一个library_B不应该依赖的实现细节.而且,一旦我们添加了另一个依赖项,这种方法就会崩溃executable_A --> library_D --> library_C.

(这个问题是我能找到的最接近的问题,但是有点笼统,但仍然没有答案.)

c++ cmake git-submodules

16
推荐指数
1
解决办法
1170
查看次数

清理克隆上的git子模块的工作流程是什么?

有关如何"本地"删除子模块的有用答案 - 如何删除子模块?

但是我有问题我在几台机器上克隆了我的仓库.两个我每个月只工作一到两次.因此,当我更新那些分支时虽然不再跟踪子模块,但文件仍然在工作分支上.git/modules.在不止一次的情况下,我偶然检查了一些.在其他情况下,由于存在这些不需要的文件/目录,我的构建失败.

我想我可以保留一个要删除的东西列表 - 但这似乎不对 - 另一个人会怎么做删除,我没有git之外的信息删除什么?

那么清理克隆的建议方法是什么?

更新

对我来说似乎是最新的git --version回报git version 2.18.0(2018-09-01).

我添加了一个可重现的例子.

建立

mkdir parent
cd parent 
git init
git submodule add https://github.com/jakesgordon/javascript-tetris.git
git commit -am add

cd ..
git clone parent clone
cd clone
git submodule update --init
Run Code Online (Sandbox Code Playgroud)

现在两个目录都包含带有签出文件的子模块javascript-tetris/. .gitmodules包含子模块.

当我做

cd parent
git rm javascript-tetris
git commit -am delete
Run Code Online (Sandbox Code Playgroud)

在父目录中,目录已经javascript-tetris消失,并且.gitmodules删除了该条目.但仍有一个人口稠密的.git/modules/javascript-tetris目录.

在克隆方面:

git pull
Run Code Online (Sandbox Code Playgroud)

发出警告:warning: unable to rmdir 'javascript-tetris': …

git git-submodules

16
推荐指数
2
解决办法
233
查看次数