Git添加。在包含.git文件夹的子目录上失败,即使被忽略

Git添加。在包含.git文件夹的子目录上失败,即使被忽略,git,gitignore,conda,miniconda,Git,Gitignore,Conda,Miniconda,我们有一个深层目录结构,在不同的层次上有多个自述文件。例如: gitignoretest/ |-- 00README |-- dir1 | |-- 00README | |-- dir1 | | |-- 00README | | |-- dir1 | | |-- dir2 | | |-- dir3 | | |-- file1 | | `-- file2 | |-- dir2 | | |-- 00README | | |-

我们有一个深层目录结构,在不同的层次上有多个自述文件。例如:

gitignoretest/
|-- 00README
|-- dir1
|   |-- 00README
|   |-- dir1
|   |   |-- 00README
|   |   |-- dir1
|   |   |-- dir2
|   |   |-- dir3
|   |   |-- file1
|   |   `-- file2
|   |-- dir2
|   |   |-- 00README
|   |   |-- dir1
|   |   |-- dir2
|   |   |-- dir3
|   |   |-- file1
|   |   `-- file2
|   |-- dir3
|   |   |-- 00README
|   |   |-- dir1
|   |   |-- dir2
|   |   |-- dir3
|   |   |-- file1
|   |   `-- file2
|   |-- file1
|   `-- file2
|-- dir3
|   |-- 00README
|   |-- dir1
|   |   |-- 00README
|   |   |-- dir1
|   |   |   |-- 00README
|   |   |   |-- dir1
|   |   |   |-- dir2
|   |   |   |-- dir3
|   |   |   |-- file1
|   |   |   `-- file2
|   |   |-- dir2
|   |   |   |-- 00README
|   |   |   |-- dir1
|   |   |   |-- dir2
|   |   |   |-- dir3
|   |   |   |-- file1
|   |   |   `-- file2

...
...
我们只想对
00自述文件进行版本设置。我们使用
.gitignore

.gitignore

但是,在实际场景中,其中一个子目录是
conda
安装,它有一些包包含自己的
.git
目录。当我执行git add.
时,它会失败,并显示以下消息:

fatal: Not a git repository: Applications/conda/lib/STAR-Fusion/STAR-Fusion.wiki/../.git/modules/STAR-Fusion.wiki
真正的场景是
。/TopLevel/Applications/…
。/TopLevel/.gitignore
。以下是我尝试过的一些事情:

../TopLevel/.gitignore

但是没有击中目标


编辑
为了解决@VonC提到的使用
.git
文件夹“取消跟踪”子目录的问题,我提供了一个全新的git存储库创建。注意:作为远程设备添加的存储库是一个新创建的
--bare
存储库

balter@server:/home/.../TopLevel$ rmdir .git
balter@server:/home/.../TopLevel$ git init
Initialized empty Git repository in /home/.../TopLevel/.git/
balter@server:/home/.../TopLevel$ git remote add origin git@server.ohsu.edu:path/repo.git
balter@server:/home/.../TopLevel$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#   .gitignore
#   00README.md
#   Applications/
#   InstallationPackages/
#   USE_APPS
#   gitignoretest/
nothing added to commit but untracked files present (use "git add" to track)
balter@server:/home/.../TopLevel$ git add .
fatal: Not a git repository: Applications/conda/lib/STAR-Fusion/STAR-Fusion.wiki/../.git/modules/STAR-Fusion.wiki
balter@server:/home/../TopLevel$rmdir.git
balter@server:/home/../TopLevel$git init
已在/home/../TopLevel/.Git中初始化空Git存储库/
balter@server:/home/../TopLevel$git远程添加原点git@server.ohsu.edu:path/repo.git
balter@server:/home/../TopLevel$git状态
#论分行行长
#
#初始提交
#
#未跟踪的文件:
#(使用“git add…”包含在将提交的内容中)
#
#.gitignore
#00README.md
#应用程序/
#安装包/
#使用应用程序
#gitignoretest/
提交时未添加任何内容,但存在未跟踪的文件(使用“git add”跟踪)
balter@server:/home/../TopLevel$git add。
致命:不是git存储库:Applications/conda/lib/STAR Fusion/STAR Fusion.wiki/./.git/modules/STAR-Fusion.wiki

< /代码> 如果您想将全树结构视为一个存储库,则需要首先删除嵌套的<代码> .git < /c>子文件夹:请参阅“”。 关于忽略规则,如果要忽略除ooremade文件以外的所有内容,则需要首先排除文件夹

*
!**/
然后可以排除文件:

!00README
确保首先未跟踪这些文件(
git status

我们的应用程序目录有一个conda安装,它似乎通过克隆git存储库来安装许多软件包。如果我去删除所有的.git目录,那么每当我运行conda update时,它要么会失败,因为它不再具有所需的repo,要么会重新克隆它们

首先,不要忽略
.git
文件夹:它们的父文件夹表示嵌套的git repo。这就是要忽略的文件夹(即
.git
文件夹的父文件夹),这样
git add就不会记录()


其次,“
不是git存储库:…/../...git/modules/..
”表示conda嵌套的repo具有,谁的:conda安装文件夹需要一个
git子模块更新--init--recursive
,才能初始化正确的嵌套子模块。

您是否尝试了
git add--all
而不是
git add.
?后者只适用于第一次提交,对吗?好吧,那是第一次提交:)但我只是尝试了
git add--all
,但得到了相同的错误:(我明白了……您是否再次尝试删除使用
rm-fr.git
git init
配置的所有git,然后
git add.
?是的,但我会重试……否
rmdir.git;git init;git remote add origingit@......git;git add.
并得到相同的错误:(尝试它。几个问题:1)它“有效”在我们的测试目录中,虽然没有文件夹本身就是存储库。2)如果我理解,
!***/
是忽略实际上是文件夹而不是文件的任何内容。对吗?@abalter 2)是:如果忽略文件夹,则任何涉及被忽略子文件夹中元素的规则都不会被使用。1) 问题是什么;)尝试了上面的方法,仍然得到了致命错误:(关于1)问题是,在测试目录中(原始问题中显示的树),我显示的
.gitignore
在忽略目录方面运行良好。那么,为什么在路的某个地方有一个
.git
目录时它会失败呢?也许我需要忽略所有以“.”开头的目录?这是我的第一个链接k details查看我的编辑。这是否完全解决了需要确保文件不被跟踪的问题?
*
!**/
!00README