具有稀疏结帐功能的 Git 提交/推送/拉取

use*_*078 6 git version-control sparse-checkout

我昨天开始使用 Git,在此之前我已经使用 SVN 多年了。让我向您解释一下我到底想实现什么目标:

我有一个针对不同项目的主要 git 存储库。像这样的东西:

  • main_repo/proj1
  • main_repo/proj2
  • main_repo/proj3

我无法为这些子项目创建单独的存储库。现在我(或其他用户)应该能够在这些独立项目中签出/提交/推送/拉取。

为此,我尝试使用以下命令进行稀疏结帐:

  1. mkdir proj1; cd proj1
  2. git init
  3. git remote add origin https://main_repo
  4. git config core.sparsecheckout true
  5. echo "proj1/" > .git/info/sparse-checkout
  6. git pull origin master

现在我需要的是获取 proj1 中同一当前目录中存在的所有文件。我得到的是这样的:

/proj1/proj1/files_and_dirs_in_proj1
Run Code Online (Sandbox Code Playgroud)

我需要的:

/proj1/files_and_dirs_in_proj1
Run Code Online (Sandbox Code Playgroud)

其次,checkout-dir 的行为不像 git repo。它不带有任何 .git 目录。所以我不明白如何在稀疏签出项目中进行提交/推/拉。

我希望我解释得很好。请建议。

ale*_*dov 2

如果我正确理解了你,那么你想要:

\n\n
    \n
  • 创建 git 存储库,其中包含 3 个项目(子文件夹 proj1、proj2、proj3)
  • \n
  • 为每个处理其项目的团队创建单独的目录(例如 teamproj1、teamproj2、teamproj3)
  • \n
  • 这些文件夹应该只包含属于适当项目的文件(例如 teamproj1 文件夹仅包含 proj1 子文件夹等)
  • \n
\n\n

在这种情况下,您可以使用以下简单步骤:

\n\n

1) 将你的主仓库添加到 git

\n\n
git init\ngit remote add origin ...\ngit add .\ngit commit -m \'Initial commit\'\ngit push\n
Run Code Online (Sandbox Code Playgroud)\n\n

2) 克隆并调整每个命令的 git 存储库(teamproj1、teamproj2、teamproj3,...)。为每个团队/项目重复下面的代码

\n\n
git clone ... teamproj1\ncd teamproj1\ngit config core.sparsecheckout true\necho \'proj1\' \xe2\x80\xba .git/info/sparse-checkout\ngit read-tree -m -u HEAD\n
Run Code Online (Sandbox Code Playgroud)\n\n

3)宾果游戏。每个命令都有自己的文件夹和项目。这个文件夹是普通的 git repo,但是这个 repo 只会显示其中的一些文件.git/info/sparse-checkout

\n\n

我添加了一些图纸以方便理解该方案

\n\n

在此输入图像描述

\n