9

私はこのようなディレクトリ構造を持っています:

root/
  .git
  deploy/
  Site/
    blah/
    more_blah/
      something.local
      else.development
    Rakefile
    .gitattributes

編集:上記をさらに明確にするために、ディレクトリには末尾が/あり、子はディレクトリの下にインデントされているためblahmore_blahディレクトリですがRakefile.gitattributesファイルですが、4つすべてがの子ですSite


私は次のようgit-archiveにディレクトリから実行しています:Site

git archive --format=tar --prefix=git-v0.0.1/ v0.0.1 | gzip > ../deploy/git-v0.0.1.tar.zip

しかし、.gitattributesにどのようなパターンを入れても、結果のアーカイブには常に。が含まれますRakefile。私はもう試した:

  • Rakefile
  • サイト/Rakefile
  • * / Rakefile
  • ./Rakefile
  • Rakefile *
  • *

それらのどれも私が期待するように動作しません。明白であるが私には自明ではない解決策を指摘してくれる人はいますか?どんな助けでも大歓迎です。


はっきりしないことをお詫びします。

  • 使用しているパターンが機能していないようですが、パターンの後に「export-ignore」を使用しています。
  • Rakefileディレクトリではなく、単なるファイルです
  • .gitattributesファイルは、アーカイブから他のパターンを削除することに成功し、Rakefile使用される唯一のパターンではありませんが、機能しない唯一のパターンです。単独でも他のパターンでも、ファイル内のどの場所でも機能しません。特定のファイルの名前を変更したが、名前を変更してコミットをアーカイブしなかったため、これは正しくありません。いくつかの良い結果が得られたようです。私の悪い!:S

これは私のです.gitattributes(ディレクトリに座っていますSite

Rakefile        export-ignore
*.local         export-ignore
*.development   export-ignore
*.staging       export-ignore
4

7 に答える 7

5

これが一般的なケースかどうかはわかりませんtestsが、ネストされたレベルのフォルダが多数あるソースツリーからフォルダを除外するのに問題がありました。この行だけを.gitattributesに書き込んだ場合

tests/* export-ignore

それは機能せず、ディレクトリ全体がアーカイブに残っていました。解決策は、すべてのサブディレクトリレベルにワイルドカードを追加することでした。

tests/* export-ignore
tests/*/* export-ignore
tests/*/*/* export-ignore
tests/*/*/*/* export-ignore
tests/*/*/*/*/* export-ignore

これらの行で、testsディレクトリは最終的にアーカイブから消えました。

于 2014-05-23T06:12:33.303 に答える
4

/注:ディレクトリを無視するには、そのディレクトリの最後に''が必要です。

Rakefile/

アーカイブの場合、Arrowmasterが彼の回答で言及しているように、そしてPro Gitの本の詳細export-ignoreのように、次のオプションが必要です。

Rakefile/ export-ignore
于 2011-04-02T18:56:42.753 に答える
4

@Jefromiは、彼のコメントでこれを解決するために必要な情報を提供してくれたと思いますが、謙虚すぎて信用を得ることができません。受け入れ率を100%(かなり正しく)に保ちたいので、答えを出します。ここ:


最初の編集:

わかりました、2つのことが必要でした。--worktree-attributesそれ自体は機能しませんでしたが、.gitattributesファイルをサイトディレクトリからルートディレクトリに移動すると、機能しました。繰り返しになりますが、Gitブックは、ファイルが機能するためにファイルがルートにある必要がないことを示しています(注:デッドリンク)

...(通常はプロジェクトのルート)


ずっと後で編集:

最新バージョンのドキュメント( 2.35.1)でさえ、リポジトリのルート(GIT_WORK_TREE / GIT_DIR)にない.gitattributesファイルへの参照があります。

作業ツリーサブディレクトリの.gitattributesファイルにはありません

作業ツリーの.gitattributesファイルにアクセスするとき、Gitはシンボリックリンクをたどりません。


私はそれらのドキュメントに少しがっかりしました(一度だけ)。また、.gitignoreが正常に機能しているときにファイルをオプトインする必要があるのは、IMOの行動ではないと思います。

于 2011-04-11T16:24:52.527 に答える
3

gitでファイルを無視する場合は、.attributesファイルではなく.gitignoreファイルにファイルを配置します。

Rakefileを無視する場合は、プロジェクトのルートにある.gitignoreファイルに次のように入力します。

/**/Rakefile

複数あり、そのうちの1つだけを無視する場合は、フルパスを指定します。

これらのファイルのパターンマッチングを実装する方法のいくつかの例:

すべてのフォルダ内のすべてのファイル
/**/*.ext
すべてのフォルダ内のファイルの場合
/**/some_file.ext
ルートフォルダ内のファイル
/some_file.ext
フォルダ内のファイル
/some_folder/some_file.ext
フォルダ内のすべてのファイル
/some_folder/*
于 2020-02-27T20:53:04.147 に答える
2

debian squeezeのデフォルトであるgitバージョン1.7.2.5(したがってこの投稿)では、ディレクトリを無視するために最後にスラッシュがあってはなりません。したがって、上記の質問のデプロイディレクトリを無視するには、次の行を使用する必要があります(スラッシュなし)。

deploy        export-ignore

これは、ドキュメント(man gitattributes / man gitignore)およびgitブックと矛盾しています。gitattributesのドキュメントはgitignoreを参照しています。興味深いことに、スラッシュ(deploy /)を使用したdirは、.gitignoreファイルで機能します。

それ以降のバージョンのgitはテストしていません。

于 2012-08-21T17:54:48.183 に答える
2

ディレクトリの場合、異なるバージョンのgitで問題が発生したため、トレーニングスラッシュがある場合とない場合の両方にエントリを含める必要がありました。

  • foo /barexport-無視する
  • foo / bar/export-無視する

ここで、foo / barは、git archiveを実行した場所を基準にしていますが、実際の.gitattributesは、上記の--worktree-attributesに加えて、プロジェクトのルートディレクトリにあります。

于 2013-10-16T23:31:18.513 に答える
1

ファイルをリポジトリに含めようとしていますが、から作成されたアーカイブには含めませんgit archiveか?.gitattributesもしそうなら、あなたのファイルの構文は間違っています。そうでない場合は、.gitattributes使用すべきものではありません。

作成したアーカイブからファイルを除外するgit archiveには、に次のように入力する必要があります.gitattrubutes

Rakefile export-ignore
于 2011-04-02T18:46:54.680 に答える