Git子模块和工作副本同时?

时间:2017-07-06 20:10:10

标签: git git-submodules working-copy

我在Git中有我的.dotfiles(.zshrc,.bashrc等)。

我想在plugins子目录中有一些额外的回购(也来自我) - 我的Emacs配置有一个自定义仓库,我的LaTeX配置有另一个备份仓库等。

将它们创建为子模块是否有意义?我的意思是:我可以将它用作工作副本,并直接从子模块编辑我的LaTeX配置吗?

或者我在这里混合一些东西? (我想避免在我的机器上使用相同内容的2个dirs,或者差不多,对于每个子模块仓库 - 我希望我的子模块始终保持最新版本,或者差不多。)

更新

我在/usr/me/.dotfiles确实有我的主回购(同时是一个可编辑的工作副本)。

如果我将子模块放在/usr/me/.dotfiles/plugins中(例如),我有一个优势,就是在克隆时将所有其他拼图块都取出来,但我知道我无法直接在那里编辑这些文件, 对?然后,这是一个问题...因为我确实有“任务文件”,例如,当我重新安排事情时编辑它们。

要正确编辑这些内容,我必须转到/usr/me/dev/repo-task-files ...根本不可行......

现在,我可以将普通回购放在/usr/me/.dotfiles/plugins中,但不能作为子模块。这意味着,在其他机器上,我必须手动(或通过脚本)在同一个地方克隆不同的repos,但它不是单行操作(克隆dotfiles时)。

但是,我可以直接编辑文件。

我改进的问题:上面的描述是对的吗?有第三种方式吗?

1 个答案:

答案 0 :(得分:0)

<强>更新

  

将它们创建为子模块是否有意义?我的意思是:我能用吗?   这也是一个工作副本,并直接编辑我的LaTeX配置   子模块?

是的,子模块应该用作独立的存储库。在子模块内提交更改与在repo的另一个本地副本中进行更改完全相同。唯一的区别是您在超级仓库中有未提交的更改。

  

如果我把子模块放在/usr/me/.dotfiles/plugins(例如)中,我有   将所有其他拼图拼凑在一起的优势,   克隆时,但我知道我无法直接编辑这些文件   在那里,对吗?

您可以像编辑任何其他git存储库一样编辑子模块。

  

现在,我可以把普通的回购放在/usr/me/.dotfiles/plugins中,   虽然不是子模块。这意味着,在其他机器上,我必须这样做   手动(或通过脚本)克隆不同的repos   地方,但它不是单行操作(克隆点文件时)。

这种方法的问题在于&#34; subrepo&#34;将出现在两个存储库中。子项目的文件夹将被视为超级项目中的另一个跟踪目录。

当repo看到其子模块发生变化时,它将报告一个修改过的文件:

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)

        modified:   plugins/LaTeX (new commits, modified content)

原始回答

关于子模块的事情是您将特定版本的存储库绑定到超级项目。如果你继续开发子模块并做出一个会破坏父模块的改变怎么办?

通过使用子模块,您确保始终具有工作版本。

无论如何,您都不应该关心在本地拥有多个存储库副本。

如果您担心在提取时浪费带宽,可以将遥控器添加到指向其他本地副本的仓库。