我想将外部目录添加到现有存储库。
外部目录: /家庭/一些/目录
工作目录: /htdocs/.git
如果我从/ htdocs dir尝试以下命令:
git add / home / some / directory
我收到错误: 致命:'/ home / some / directory'在存储库外
答案 0 :(得分:51)
如果我需要做类似的事情,我通常会将该外部文件或目录移动到我的git repo中,并将其原始位置符号链接到新的。
mv /home/some/directory /htdocs/directory
ln -s /htdocs/directory /home/some/
git add ./directory
当我为应用程序开发一个插件时,我想使用这种技术,我希望将其保留在版本控制之下但必须存储在特定位置。
答案 1 :(得分:15)
我有同样的错误......用谷歌搜索死了......没多大出来。
克里斯蒂安的回答有效:
git --work-tree=/ add /home/some/directory
然后“工作树”让我走了。我grep了所有Git文档并提出了core.worktree
。
我用过
git config --global core.worktree /
瞧!我现在可以从系统中的任何目录添加。 我不知道它是否会引起其他任何地方的问题,但我会在我继续进行更新。
答案 2 :(得分:13)
git --work-tree=/ add /home/some/directory
答案 3 :(得分:8)
这是一个非常简单的解决方案。
假设你是Git-repo在/ var / data / my-app中,你想要将/ var / data / public /添加到该repo。你不能使用'add',因为Git不会在repo的根目录之外添加资源。所以..
解决方案:
将/ var / data / public /目录移动到您的Git-repo根目录(/ var / data / my-app)。
使用:ln -s source_file_or_directory virtual_file_or_directory
然后,只需以正常方式使用git add
将移动的文件或目录添加到Git。您的Git源代码控制现在正在跟踪所需的文件/文件夹,外部目录中的sym-link确保文件/文件夹可以被其他任何内容访问!
答案 4 :(得分:1)
如果要添加到回购的代码不是太大,每次推送之前,您也可以自动将其复制到回购。
在我的情况下,我需要一个R文件,我经常修改,在几个repos中,我写了一个小shell脚本:
#!/usr/bin/env bash
cp -r /some/directory/file.R .
git add .
git commit -m "add"
git push
...我运行此脚本以推送所有更改,包括/ some / directory中的更改。
答案 5 :(得分:0)
如果你想在不同的git repos中工作,你可以使用子模块(ln不能以这种方式工作)。试试'man git-submodule'。
答案 6 :(得分:0)
这让我开始思考,因为我非常希望使用符号链接的文件/目录的解决方案,但是它被卡在Windows计算机上。据我所知,Windows中的符号链接实际上并没有以相同的方式工作。因此,另一个解决方案是编写两个脚本/ bash函数来“导入”和“导出”所涉及的文件,例如:
import() {
cp -fr /home/some/directory /htdocs/
}
export() {
cp -fr /htdocs/directory /home/some/
}
然后,您将在存储库中拥有该文件的副本,您可以git add
。
答案 7 :(得分:0)
我会硬链接到外部目录中的每个文件。 由于硬链接不会对原始文件产生额外的开销,因此它可能是一个完美的同步。 唯一的问题是目录不能链接(只能被超级用户链接),所以必须创建它来存储文件。
比如通常zeppelin只支持notebook文件的版本控制,但是我在父目录下添加了conf文件的硬链接如下:
.
├── 2A94M5J1Z
│ └── note.json
├── 2G2U2ZR1T
│ └── note.json
├── conf
│ ├── shiro.ini
│ ├── zeppelin-env.sh
│ └── zeppelin-site.xml
└── README.md
答案 8 :(得分:-2)
添加符号链接到存储库中的目录。然后,添加相同的。
ln -s /home/some/directory/
git add directory