小编Bar*_*Bog的帖子

Git:递归移动子模块(嵌套子模块)

我有以下git结构

- git-repo a
-- subdirectory 2015
--- git-submodule b
-- git-submodule c
--- git-submodule d
Run Code Online (Sandbox Code Playgroud)

我想将git子模块c移动到文件夹2015.我知道"脏方法"这样做(涉及修改.git/config并更改.git/modules文件中的几个文件中的gitdir)

我最近读到git mv应该能够做到这一点,即运行

git mv c 2015/
Run Code Online (Sandbox Code Playgroud)

这适用于没有嵌套子模块的存储库(在我的例子中为d).但是,当我在我的目录上运行此命令时,我收到的错误就像

fatal: Not a git repository: d/../../.git/modules/c/modules/d
fatal: 'git status --porcelain' failed in submodule 2015/c
Run Code Online (Sandbox Code Playgroud)

(注意,执行上述移动后,git状态会出现此错误)

是否有人知道一个干净的方法来执行此移动(即,不涉及手动更改.git/modules文件中的路径)?

编辑:(6/10/2015)

我目前最好的解决方案是不涉及对任何git配置文件的修改(首先要确保对d的所有更改都已提交并推送到某处)

rm c/d -rf
git mv c 2015
cd 2015/c
git submodule update
Run Code Online (Sandbox Code Playgroud)

编辑:(8/10/2015)

一个更少侵入性的解决方法

git mv c 2015
rm 2015/c/d/.git
cd 2015/c
git submodule update
Run Code Online (Sandbox Code Playgroud)

编辑:(21/9/2018)

自从git版本2.19.这已得到修复,并且git mv表现如预期.

git git-submodules git-mv

13
推荐指数
1
解决办法
999
查看次数

Parsec.Expr以不同的优先级重复前缀

Parsec.Expr.buildExpressionParser的文档说:

相同优先级的前缀和后缀运算符只能出现一次(如果 - 是前缀否定,则不允许--2).

但是,我想解析这样的字符串.

具体来说,请考虑以下语法:

sentence: 
    | identifier
    | "~" sentence
    | sentence & sentence
    | "!" sentence
Run Code Online (Sandbox Code Playgroud)

运算符优先级为:"~"绑定强于"&"绑定强于"!"

例如,我想要这句话

! ~a & b
Run Code Online (Sandbox Code Playgroud)

被解析为

! ( (~a) & b )
Run Code Online (Sandbox Code Playgroud)

而且这句话

~ ! a & b 
Run Code Online (Sandbox Code Playgroud)

~( ! ( a & b) )
Run Code Online (Sandbox Code Playgroud)

Parsec允许我这样做(并指定运算符优先级),但是,我希望能够链接前缀,例如~ ~ ! ~ a.Parsec不允许这样做.我找到了链接前缀的解决方案,但是这个解决方案不允许我为不同的前缀运算符指定不同的运算符优先级("〜"和"!"绑定比"&"更强,或者它们都没有)

有人有解决方案吗?

编辑:

部分解决方案使操作员绑定正确,但不允许链接:http: //lpaste.net/143362

带链接的部分解决方案,但对"〜"运算符有错误的绑定:http: //lpaste.net/143364

编辑:有关最新答案的更多说明.

我其实想要&联想.左或右无所谓.左与右关联性仅在具有相同优先级的运算符之间起作用.对于您的示例,通过注意&绑定强于! …

haskell parsec

6
推荐指数
1
解决办法
376
查看次数

git submodule update --init 上的错误

我有一个带有多个git submodules的主存储库。

最近我遇到了一个我无法解决的新错误:

fatal: Could not switch to '~/git': No such file or directory
Clone of '~/git/MyModule_A.git' into submodule path '.modman/MyModule_A' failed
Run Code Online (Sandbox Code Playgroud)

我在做什么

首先,我像往常一样克隆主仓库: git clone /path/to/the/bare/repo.git src

然后,我运行git submodule update --init它确实正确注册了所有子模块并将它们添加到.git/config.

Submodule '.modman/MyModule_A' (~/git/MyModule_A.git) registered for path '.modman/MyModule_A'
Submodule '.modman/MyModule_B' (~/git/MyModule_B.git) registered for path '.modman/MyModule_B'
Submodule '.modman/MyModule_C' (~/git/MyModule_C.git) registered for path '.modman/MyModule_C'
fatal: Could not switch to '~/git': No such file or directory
Clone of '~/git/MyModule_A.git' into submodule path '.modman/MyModule_A' failed
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试过的

  • MyModule_A …

git git-submodules

4
推荐指数
1
解决办法
1809
查看次数

标签 统计

git ×2

git-submodules ×2

git-mv ×1

haskell ×1

parsec ×1