git:如何将外部目录添加到存储库?

我想将外部目录添加到现有的存储库。

外部目录:/ home / some /目录

工作目录:/htdocs/.git

如果我从/ htdocs目录中尝试以下命令:

git add / home / some /目录

我得到一个错误:致命的:'/ home / some /目录'是外部存储库

如果我需要这样做,我通常会将该外部文件或目录移动到我的git仓库中,并将其原始位置符号链接到新位置。

mv /home/some/directory /htdocs/directory ln -s /htdocs/directory /home/some/ git add ./directory 

当我正在为一个应用程序开发插件时,我使用这种技术,我想保留在版本控制下,但必须存储在特定的位置。

我有同样的错误…谷歌search死亡…没有太多出来。

基督徒的答案奏效了:

 git --work-tree=/ add /home/some/directory 

但是“工作树”让我走了。 我grep'd所有的Git文件,并提出了core.worktree

我用了

 git config --global core.worktree / 

瞧! 我现在可以从系统中的任何目录添加。 我不知道是否会导致其他地方的问题,但我会尽力去更新。

 git --work-tree=/ add /home/some/directory 

有一个非常简单的解决scheme。

假设你是Git-repo,它在/ var / data / my-app中,并且你想添加/ var / data / public /到那个回购。 您不能使用“添加”,因为Git不会在回购的根目录之外添加资源。 所以..

解:

  1. 将/ var / data / public /目录移动到您的Git-repo根(/ var / data / my-app)中。

  2. 在/ var / data / public里创build一个sym-link(符号链接)到/ var / data / my-app / public文件夹,使用: ln -s source_file_or_directory virtual_file_or_directory

然后,使用git add以正常的方式添加移动的文件或目录到Git。 您的Git源代码控件现在正在跟踪所需的文件/文件夹,并且外部目录中的sym-link可以确保文件/文件夹可以被其他人访问!

如果你想添加到你的回购代码不是太大,你也可以自动将它复制到你的回购每次你推。

在我的例子中,我需要一个R文件,我经常修改一个R文件,在几个版本中,我写了一个shell脚本:

 #!/usr/bin/env bash cp -r /some/directory/file.R . git add . git commit -m "add" git push 

…我运行这个脚本是为了推动所有的变化,包括/ some /目录中的变化。

或者你可以使用子模块,如果你想跨越不同的git仓库工作(没有这样的工作)。 试试'man git-submodule'。

向存储库中的目录添加一个符号链接。 然后,添加相同的。

 ln -s /home/some/directory/ git add directory