4

我正在做一个星号项目,并希望将代码放在 Git 中以进行版本跟踪。

以下是代码所在的 3 个目录:

  • 星号拨号方案:/etc/asterisk/custom
  • 星号 AGI 代码:/var/lib/asterisk/agi-bin
  • 网页界面:/var/www/html/

我不想在 Git 中将这些作为 3 个单独的 repo 进行跟踪。我如何将它们全部放在一个 Repo 中?

我的谷歌 fu 没有提出任何相关的内容。

4

3 回答 3

1

如其他答案中所述,您可以将目录移动到公共父目录下并将其作为一个存储库进行跟踪或使用子模块方法。

如果您不想移动现有目录,则可以将根目录/视为您的父目录(前提是您具有必要的权限)。

# Initialize git repo at root
git init /

# Add the directories to be tracked
git add /path/to/directory1 /path/to/directory2

但是,这会导致很多文件未被跟踪(请参阅git status输出),因为存储库是在根目录初始化的。忽略所有这些文件的一种方法是将它们添加到$GIT_DIR/info/exclude文件中。

打开编辑器将此文件修改/.git/info/exclude为:

# ignores everything under root directory
/*

# except these paths
!/path/to/directory1/*
!/path/to/directory2/*

您可以确认git status只有您之前添加的目录已为新提交暂存,并且它不应再显示任何未跟踪的文件。

如果满意,请创建您的第一个提交

git commit -m "Your commit message"
于 2020-04-29T23:27:40.463 回答
0

您可以将所有这些文件夹移动到新创建的目录中,在其中启动 git 存储库并添加所有文件,然后将文件重新符号链接回其原始路径。

像这样的东西(请先备份您的文件,以防您(或更可能是我)犯了错误):

mkdir -p ~/repos/my-asterisk
mv /etc/asterisk/custom /var/lib/asterisk/agi-bin /var/www/html/  ~/repos/my-asterisk
cd ~/repos/my-asterisk
git init .
git add .
git commit -m "init"
ln -s $PWD/custom /etc/asterisk/custom
ln -s $PWD/agi-bin /var/lib/asterisk/agi-bin
ln -s $PWD/html /var/www/html

这有一些缺点,例如:

  • git repo 中文件的用户/组/权限必须与您的系统外观匹配 1:1(即在另一台服务器上使用 git repos 文件可能需要完全相同的设置)
  • 当您升级系统包/您的发行版/任何其他涉及这些目录的内容时,它们将在您的 git 存储库中记录更改。这可能是也可能不是您想要的。您必须跟踪何时提交这些更改(即git status定期在此存储库中)。

如果您只在您的单台计算机上使用它,这可能没问题,并且将内容存储在 git 中只是一种快速的安全措施。


你可以略读:

当您想为此花费大量时间时,您最终会阅读有关配置管理系统的内容:)

于 2020-04-29T22:01:43.900 回答
0

这可能不是您想要的,但您可以考虑:

  1. 添加 git 子模块或...
  2. 在同一父 git 目录下移动目录

进入一个初始化的 git 存储库,您希望在其中存储其他存储库。然后,在同一目录中,使用:

git submodule add <repo url>

例如,

git submodule add https://github.com/rust-lang/rust.git

您可以通过转到 repo 的主页并单击“克隆或下载”来找到 repo url,然后复制链接。

如果这些还不是 git repos,那么您不能将这些目录添加到同一个 git repo。您包含的每个目录都必须是 git 初始化目录的子目录。如果是,那么您可以使用:

git add <directory path>

例如,

git add ./subdirectory1/subdirectory2
于 2020-04-29T21:46:39.023 回答