代码之家  ›  专栏  ›  技术社区  ›  Joe Casadonte

一个目录中有两个git存储库?

  •  68
  • Joe Casadonte  · 技术社区  · 16 年前

    9 回复  |  直到 8 年前
        1
  •  186
  •   Packard CPW    7 年前

    这篇文章比较详细地介绍了这一点:

    https://github.com/rrrene/gitscm-next/blob/master/app/views/blog/progit/2010-04-11-environment.markdown

    基本上,如果您是从命令行工作,这比您想象的要简单。假设您想要2 git回购:

    .gitone
    .gittwo
    

    您可以这样设置它们:

    git init .
    mv .git .gitone
    git init .
    mv .git .gittwo
    

    git --git-dir=.gitone add test.txt
    git --git-dir=.gitone commit -m "Test"
    

    #!/bin/sh
    alias gitone='git --git-dir=.gitone'
    alias gittwo='git --git-dir=.gittwo'
    

    因此,您可以通过少键入一点来提交一个或另一个,如 gitone commit -m "blah" .

    看起来更棘手的是忽视。由于.gitignore通常位于项目根目录中,因此您需要找到一种方法来切换它,而不必切换整个根目录。或者,您可以使用.git/info/exclude,但是您执行的所有忽略操作都不会被提交或推送,这可能会让其他用户崩溃。其他使用任一回购协议的人可能会推送.gitignore,这可能会导致冲突。我不清楚解决这些问题的最佳方法。

        2
  •  41
  •   Paul    16 年前

    如果我了解您在做什么,您可以在一个存储库中处理所有这些内容,为每台机器使用单独的分支,并使用一个包含公共主目录配置文件的分支。

    然后在每台机器上签出该机器的分支,该分支还将包括公共配置文件。

        3
  •  16
  •   Hates_    16 年前

    看看 git submodule .

    源树的子目录, 始终指向特定的提交。

        4
  •  6
  •   Seth Robertson    13 年前

    里奇编写了一个名为 vcsh 这是一个管理点文件的工具,使用git的伪裸repos将多个工作目录放入$HOME。与csh AFAIK无关。

    gitslave 这使得从属回购始终在分支的顶端签出,并且不需要三步流程来更改子回购(签出到正确的分支,进行更改并提交更改,然后进入超级项目并提交新的子模块提交)。

        5
  •  6
  •   kenorb    8 年前

    通过使用变量,这是可能的 GIT_DIR

        6
  •  4
  •   Pat Notz    16 年前

    是的,子模块可能就是你想要的。另一种选择是将工作副本放在子目录中,然后将主目录中的符号链接指向感兴趣的文件。

        7
  •  4
  •   coderofsalvation    11 年前

    git clone repo1
    cd somerepo
    git clone repo2
    cd repo2
    ./build
    

    火车在哪里 回购/建造

    #!/bin/bash 
    SELF_PATH="$(dirname "$(readlink -f "$0")" )"  # get current dir 
    cd .. && git stash && git clean -f -d ''       # remove previous symlinks
    cp -sR "$SELF_PATH"/* ../.                     # create recursive symlinks in root
    

    小心

        8
  •  1
  •   Evandro Coan    8 年前

    另一个选项是将它们放在单独的文件夹上,并创建从一个文件夹到另一个文件夹的符号硬链接。

    例如,如果存在存储库:

    1. 报告1/文件夹B

    以及:

    1. Repo2/FolderC

    您可以对文件夹进行符号链接 FolderA FolderB 从Repo1到Repo2。对于windows,在Repo1上运行的命令为:

    User@Repo1$ mklink /J FullPath/Repo2/FolderA FullPath/Repo1/FolderA
    User@Repo1$ mklink /J FullPath/Repo2/FolderB FullPath/Repo1/FolderB
    User@Repo1$ printf "/FolderA/*\n/FolderB/*\n" >> .gitignore
    

    .gitignore 为了避免噪音,除非你愿意。

        9
  •  0
  •   user1810087 Akin Ocal    7 年前

    免责声明:这不是广告。我是提供的库的开发者。

    我创建了一个git扩展,用于处理将多个存储库混合到一个文件夹中的情况。lib的优点是,可以跟踪存储库和文件冲突。你可以在网上找到它 github . 还有两个示例存储库可以试用。