# Git







```kt collapse {9,21,29,37}
// ProjectArchitecture.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.architecture

val projectArchitecture = architecture {
    "Tools".group {
        git()
    }
}

// roles/Git.kt
@file:OptIn(ExperimentalKatachiApi::class)

import me.tbsten.katachi.ExperimentalKatachiApi
import me.tbsten.katachi.dsl.DeclarationContainerScope

fun DeclarationContainerScope.git() =
    "Git".group {
        "GitIgnore" {
            title = "Git 無視設定"
            summary = "Git に渡さないファイルの一覧（.gitignore）"
            layout {
                "**/.gitignore".file()
            }
        }

        "GitKeep" {
            title = "Git 空ディレクトリ保持"
            summary = "ディレクトリを残すための空ファイル（.gitkeep）"
            layout {
                "**/.gitkeep".file()
            }
        }

        "GitAttributes" {
            title = "Git 属性"
            summary = "改行コードや diff の扱いなど、パスごとの属性（.gitattributes）"
            layout {
                "**/.gitattributes".file()
            }
        }
    }
```

サンプルでは `.gitignore` だけを1つの Role で宣言しています（[sample/jvm の GitRole.kt](https://github.com/TBSten/katachi/blob/main/sample/jvm/architecture-test/src/test/kotlin/com/example/roles/GitRole.kt)）。

<SnippetIsStartingPoint />