我已将子目录移动到单独的存储库中,然后将其作为子模块包含在内.
现在我想在该变化之上重新定义另一个分支.
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 bundle来备份git存储库.在最新版本的git中,子模块的存储库元数据存储在父存储库的.git/modules中,而不是存储在子模块中的.git目录中之前.
当git-bundle在子模块中运行时,它会创建一个父repo的包,省略子模块.
谁可以解释这个?
如何制作子模块的git包?
参考: git邮件列表上的问题
编辑:
在阅读了sschuberth之后,我就编写了一个脚本来测试,并且可以验证它是否有效.我有一个备份脚本,它依赖于验证.git 目录的存在,以便知道它是否在存储库的顶级目录中,并且当子模块开始使用.git 文件时就会破坏.如果有人知道建议的方法是保证你在存储库的顶级文件夹,我很感兴趣.我不知道我是怎么错过这个的.
为了防止必须为子模块编写测试脚本的人感兴趣,这是我使用的脚本:
#!/bin/bash
git --version
mkdir super
mkdir subRemote
touch super/superFile.txt
touch subRemote/subFile.txt
cd super
git init
git add --all
git commit -am"Initial commit"
cd ..
cd subRemote
git init
git add --all
git commit -am"Initial commit"
cd ..
cd super
git submodule add ../subRemote/.git
git add --all
git commit -am"added submodule"
git submodule update
echo -e "\ngit log in super:"
git log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s …Run Code Online (Sandbox Code Playgroud) 我有一个有子模块的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 …
我有一个Jenkins的工作,从一个工作正常的BitBucket回购中提取,现在仍然如此.但是,我添加了一个子模块,Jenkins对此感到窒息.这是来自Jenkins控制台输出的剪辑:
致命:命令"C:\ Program Files(x86)\ Git\cmd\git.exe子模块更新"返回状态码1:stdout:克隆到'submodules/my.repo'...
stderr:致命:身份验证失败
我正在使用一个ssh密钥,我将其添加到BitBucket中主要仓库的部署密钥中.这一切都有效.我在子模块repo的部署密钥中添加了相同的密钥.任何人都可以告诉我为什么身份验证失败?
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所做的更改的能力.
去年我一直在做的就是休息
Assets\<company name>\<main project name>\Assets\<company name>\<library name>\Assets\<company name>\<library name>\与我之前复制库文件的库的原始位置进行文件夹比较.伴随着这种精神错乱,还有另一个问题.主要项目不是我现在唯一的主要项目.我有一些项目都引用(通过复制/粘贴)这些其他库.所以现在我已经更新了库的代码并提交了它,我现在必须回顾每个使用库的主项目,并将库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超出它的基本核心功能而且我只通过测试项目进行了初步测试但是我不能让git以我需要的方式可靠地工作,并且经常在使用子模块时有点混乱,而且由于各种错误,它往往不会提交.
我想做的就是这个
我甚至已经开始编写一个实用程序,它会在检测到更改后自动在两个不同文件夹之间同步文件.但我放弃了它,因为虽然它可以解决同步问题,但它无法解决git提交问题.
另一个问题是我所有拥有本地回购的现有统一项目都被设置为休耕
<Unity Main Project Folder>
|- .git …Run Code Online (Sandbox Code Playgroud) 我找了一会儿却找不到答案(也许我不知道该看什么).
我们有一个主库,它是一个自己的存储库(让我们称它为Lib)它包含我们的大多数模块和子模块.我们还说它的大小为2GB ......
现在我们有很多项目,例如:ProjA,ProjB,ProjC,每个项目都使用Lib作为子模块.
ProjA
- Lib(分支:master,commit#:1)
ProjB
- Lib(分支:其他,提交#:2)
ProjA
- Lib(分支:master,commit#:4)
因此,虽然我能够保持每个项目引用正确的库(aka子模块)版本.我现在有3*2GB = 6GB的THE SAME子模块.
有没有办法在保持引用的正确文件/版本控制的同时引用单个子模块?
例如.
ProjA
Lib/base_lib.h(v1.0)
LIB/file_only_in_this_commit
ProjB
- Lib/base_lib.h(v1.0)
ProjC
- Lib/base_lib.h(v1.1)
谢谢!
原始.gitmodules文件使用硬编码的httpsURL但是对于一些自动化测试,我克隆ssh并使子模块URL相对,如../ModuleName.我也不想将这些变化推回到回购中.
# change the https://github.com/ with git@github.com:
sed -i 's/https:\/\/github.com\//git@github.com:/g' ".git/config"
# delete the url lines from the submodule blocks of .git/config
sed -i '/submodule/ {$!N;d;}' ".git/config"
# change hardcoded https:// urls of submodules to relative ones
sed -i 's/https:\/\/github.com\/ProjName/../g' ".gitmodules"
# also make the same change in the .git/modules/*/config
sed -i 's/https:\/\/github.com\/ProjName/../g' .git/modules/*/config
# sync and update
git submodule sync
git submodule update --init --recursive --remote
Run Code Online (Sandbox Code Playgroud)
通过上面的代码片段,它可以实现我想要的功能.然而,令人讨厌的是,.git/modules/文件夹似乎没有版本控制,但如果我只是删除它,git submodule …
当我们在git存储库中有很多(比如20个)子模块时,我们可以像这样安装(和更新)它们:
git submodules update --init --recursive
Run Code Online (Sandbox Code Playgroud)
Git尝试在此命令后下载每个子模块(递归).如果我们想让一些子模块可选(如插件)怎么办?
我们怎样才能让git跳过默认下载这些可选子模块,并在我们标记这个子模块时处理为通常的子模块"好的,从现在开始使用"?
是否有任何理由使用包管理器而不是git子模块/子树,反之亦然?git解决方案似乎比简单的包管理器麻烦得多.
假设git子模块的节省空间的好处并不重要.
更新:有人在这个问题上添加了一个C++标签,但我已经删除了它.这个问题与C++没有特别的关系.欢迎提供比接受的答案更一般的答案.
在我的一个项目中,一旦我的构建脚本尝试使用以下命令获取所有Git标签,Travis构建就会失败,然后才能访问我的任何构建系统或代码git fetch --tags:
`` git fetch --tags --verbose
POST git-upload-pack (350 bytes)
POST git-upload-pack (788 bytes)
POST git-upload-pack (797 bytes)
From https://github.com/ELLIOTTCABLE/bs-sedlex
= [up to date] fix-ci -> origin/fix-ci
* [new tag] sedlex-1.99.2 -> sedlex-1.99.2
* [new tag] v1.99.3 -> v1.99.3
...
* [new tag] v20.0.0-pre.2 -> v20.0.0-pre.2
Fetching submodule ppx-sedlex
POST git-upload-pack (122 bytes)
From https://github.com/ELLIOTTCABLE/ppx-sedlex
= [up to date] develop -> origin/develop
= [up to date] master -> origin/master
...
= [up to date] v20.0.0-pre.2 -> …Run Code Online (Sandbox Code Playgroud) git-submodules ×10
git ×9
bitbucket ×1
git-rebase ×1
git-subtree ×1
github ×1
jenkins ×1
plugins ×1
teamcity ×1
travis-ci ×1