2017-03-07 6 views
3

異なるレベルの複数のREADMEファイルを含む深いディレクトリ構造があります。例えば:追加。無視されていても.gitフォルダを持つサブディレクトリでは失敗します

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ファイルにしたいです。我々は成功したが、実際のシナリオでは、サブディレクトリの一つは、自分の.gitのディレクトリを含むいくつかのパッケージを持っているcondaインストールされthis.gitignore

.gitignore

# Ignore everything 
* 

# But not these files... 
!.gitignore 
!00README 
# etc... 

# ...even if they are in subdirectories 
!*/ 

でこれをテストしました。私はgit add .を行うと、それはメッセージで失敗します。

fatal: Not a git repository: Applications/conda/lib/STAR-Fusion/STAR-Fusion.wiki/../.git/modules/STAR-Fusion.wiki 

本当のシナリオは、../TopLevel/.gitignore../TopLevel/Applications/...です。ここで私が試したものは以下のとおりです。

../TopLevel/.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 
!*/ 

しかし、マークを打つませんが。


EDITは@VonCで述べたように.gitフォルダと「untracking」サブディレクトリの問題に対処するために、私はgitリポジトリの完全新鮮な創造を提示します。注:リモートとして追加されるリポジトリは、新しく作成された--bareリポジトリです。あなたが1つのリポジトリとして、すべてのツリー構造を検討したい場合

[email protected]:/home/.../TopLevel$ rmdir .git 
[email protected]:/home/.../TopLevel$ git init 
Initialized empty Git repository in /home/.../TopLevel/.git/ 
[email protected]:/home/.../TopLevel$ git remote add origin [email protected]:path/repo.git 
[email protected]:/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) 
[email protected]:/home/.../TopLevel$ git add . 
fatal: Not a git repository: Applications/conda/lib/STAR-Fusion/STAR-Fusion.wiki/../.git/modules/STAR-Fusion.wiki 
+0

'git add .'の代わりに' git add --all'を試しましたか?後者は最初のコミットだけです。 – mickdev

+0

さて、これは最初のコミットでした:)しかし、私はちょうど 'git add --all'を試して同じエラーを受けました:( – abalter

+0

私は...' rm -fr .git'で設定されたgitをすべて削除しようとしましたか?そして、 'git init'をもう一度' git add 'してもらえますか? – mickdev

答えて

1

には、最初に、ネストされた.gitサブフォルダを削除する必要があります:「Initial push to GitHub Missing Sub Directory」を参照してください。

!00README 

たものを確認してください:あなたはOOREMEADEファイル以外のすべてを無視したい場合、あなたは、あなたがファイルを除外することができ、フォルダ

* 
!**/ 

を除外する・ファーストを必要とし、ルールを無視について

ファイルは最初に追跡されません(git status

アプリケーションディレクトリにはcon gitリポジトリを複製することによって多くのパッケージをインストールするようだ。もし私が行って、すべての.gitディレクトリを削除すると、私がconda updateを実行するたびに、必要なリポジトリがなくなるか、再作成されます。

まず、.gitフォルダを無視しないでください。親フォルダはネストされたgit repoを表します。これは、その方法はgit add .は(special entry in index of the parent repo

セカンドをgitlinkを記録しません、あなたが無視したいフォルダ(.gitフォルダの親)である「Not a git repository: .../../.git/modules/...」condaネストされたレポがsubmodulesを有することを意味しますそのsupport is still in progress with conda:適切なネストされたサブモジュールを初期化するために、condaインストールフォルダにgit submodule update --init --recursiveが必要です。

+0

)試してみてください:1)フォルダがなくてもテストディレクトリに"働いていました " 2)私が理解すれば '!** /'はファイルではなく実際にはフォルダであるものを無視することです。 t? – abalter

+0

@abalter 2)yes:フォルダが無視された場合、その無視されたサブフォルダ内の要素を含むルールはまったく使用されません。 1)質問は何ですか;) – VonC

+0

上記を試しても、まだ致命的なエラーが発生しました:(1に関して)問題はテストディレクトリ(元の質問に表示されたツリー)で、私が示した '.gitignore'ディレクトリを無視します。だから、どこかに '.git'ディレクトリがあると失敗するのはなぜですか?たぶん、 "。"で始まるすべてのディレクトリを無視する必要がありますか? – abalter

関連する問題