我正在做一个星号项目,并希望将代码放在 Git 中以进行版本跟踪。
以下是代码所在的 3 个目录:
- 星号拨号方案:
/etc/asterisk/custom
- 星号 AGI 代码:
/var/lib/asterisk/agi-bin
- 网页界面:
/var/www/html/
我不想在 Git 中将这些作为 3 个单独的 repo 进行跟踪。我如何将它们全部放在一个 Repo 中?
我的谷歌 fu 没有提出任何相关的内容。
如其他答案中所述,您可以将目录移动到公共父目录下并将其作为一个存储库进行跟踪或使用子模块方法。
如果您不想移动现有目录,则可以将根目录/
视为您的父目录(前提是您具有必要的权限)。
# 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"
您可以将所有这些文件夹移动到新创建的目录中,在其中启动 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 status
定期在此存储库中)。如果您只在您的单台计算机上使用它,这可能没问题,并且将内容存储在 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