我们有一个深层目录结构,包含不同级别的多个README文件。例如:
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
...
...
我们只希望版本00README
个文件。我们使用this .gitignore
的.gitignore
# Ignore everything
*
# But not these files...
!.gitignore
!00README
# etc...
# ...even if they are in subdirectories
!*/
但是,在真实方案中,其中一个子目录是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
。以下是我尝试过的事情:
../顶层/的.gitignore
# Ignore everything
*
/Applications/conda/**/*
/Applications/miniconda3/**/*
/Applications/newconda/**/*
Applications/conda/**/*
Applications/miniconda3/**/*
Applications/newconda/**/*
/**/.git
**/.git
/**/.git/**
**/.git/**
# But not these files...
!.gitignore
!00README.md
!USE_APPS
# etc...
# ...even if they are in subdirectories
!*/
但没有达到标记。
修改
解决"未跟踪问题" @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
答案 0 :(得分:1)
如果要将所有树结构视为一个存储库,则需要先删除嵌套的.git
子文件夹:请参阅“Initial push to GitHub Missing Sub Directory”。
关于忽略规则,如果你想忽略除OOREMEADE文件之外的所有内容,你需要fisrt来排除文件夹
*
!**/
然后您可以排除文件:
!00README
确保首先将这些文件取消跟踪(git status
)
我们的Applications目录有一个conda安装,似乎通过克隆git存储库来安装许多软件包。如果我去删除所有的.git目录,那么每当我运行conda update时,它都会失败,因为它不再有它需要的repos,或者它会重新克隆它们。
首先,您不要忽略.git
个文件夹:它们的父文件夹代表一个嵌套的git仓库。这是您要忽略的文件夹(.git
文件夹的父级),git add .
不会记录 gitlink ({{3 }})
其次,“Not a git repository: .../../.git/modules/...
”表示conda嵌套的repo具有 special entry in index of the parent repo ,其submodules:该conda安装文件夹需要git submodule update --init --recursive
为了初始化正确的嵌套子模块。