This Gradle Plugin has a DSL(Domain Specific Language) and Tasks for handling git repositories in some Use Cases.
Gitは柔軟で強力な分散バージョン管理ツールですが、 それだけに実際の開発ではどのように利用するか、運用ルールを決める必要があります。
Gitによる運用ルールのベストプラクティスとしては、 Git Flow、GitLab Flow、GitHub Flowなどが有名です。
Git Flowは大規模な開発、運用を長期的に行う場合に向いているようです。 GitLab Flowは中・小規模で、iOS/Androidアプリケーションなどの開発に、 GitHub Flowは小さいチームに別れて行なうWebアプリケーションの開発に向いているようです。 詳細は最後の URLを参照してください。
この DSLが想定しているユースケースについて説明します。
"fork"により開発を初める場合となります。
-
(a) GitHubやGitBucket等のレポジトリにて、 機能拡張や不具合修正の対象となる、オリジナルのレポジトリ(Original Repository)を forkし、 自分のレポジトリ(My Repository)を作成する。
-
(b) 自分のレポジトリ(My Repository)を、cloneして ローカルレポジトリ(Local Repository)を作成する。
-
(c) 機能拡張や不具合修正を行なうための branchを作成する。(GitHub Flowを想定)
-
(d)(e) 修正や新規追加したファイルを addし、commitする。
-
(f) 広く公開する前に、プライベートなサーバに pushし、公開して問題無い内容か確認する。 または、プロジェクトメンバによりレビューを行なう。 (必要に応じて pull requestをプライベート・サーバで発行する)
-
(g)(h) 他のプロジェクトメンバからの pushがあれば、それを fetchし mergeする。 または、他のメンバから pull requestがあれば mergeする。
-
(i) 問題が無ければ、公開するために pushする。
-
(j)(h) オリジナルのレポジトリ(Original Repository)で、 修正・更新されたコードを取り込むために、fetchし mergeする。
この DSLの記載例を以下に示します。
git { repository = 'gitbucket' // (1) filepattern = [''] // (2) user_name = 'nobusugi246' // (3) user_email = '[email protected]' // (4) remote = 'https://github.com/nobusugi246/gitbucket.git' // (5) upstream = 'https://github.com/gitbucket/gitbucket.git' // (6) acount = 'nobusugi246' // (7) password = 'xxx' // (8) middle = 'http://localhost:8080/git/xxx/gitbucket.git' // (9) middleAcount = 'xxx' // (10) middlePassword = 'xxx' // (11) comment = '' // (12) } githubFlow { topic = 'feature_xx' // (13) }
-
ローカルレポジトリを作成するフォルダ名
-
fork/cloneする時は不要。ファイルの追加/修正した時に、そのファイル名やフォルダを指定する。
-
gitのユーザ名
-
gitのメールアドレス
-
forkした、cloneの対象のレポジトリ(My Repository)への URL
-
fork元のレポジトリ(Original Repository)への URL
-
GitHub(またはGitBucket等)のアカウント名
-
GitHub(またはGitBucket等)のパスワード
-
プライベートな Gitサーバへの URL
-
プライベートな Gitサーバのアカウント名
-
プライベートな Gitサーバのパスワード
-
commitするときのコメント。随時、commit時に記載する。
-
branchを作成するときの branch名
At first, you needs a environment that you can execute gradle or gradlew commands.
タスクの実行は、gradleまたは gradlewコマンドを実行できる環境で、行なってください。
$ gradle --daemon -b git.gradle clone
$ gradle --daemon -b git.gradle middlePush
$ gradle --daemon -b git.gradle clone middlePush
$ gradle --daemon -b git.gradle push
$ gradle --daemon -b git.gradle sync
新規に開発したコードを公開する場合となります。
-
GitHub(またはGitBucket等)には空のレポジトリを作成しておく。 ローカルで作成したコードを対象に、レポジトリを作成((a) init)し、 ファイルを追加((b) add)、コミット((c) commit)、 プライベートなサーバに(d) pushして確認、 問題無ければ GitHubに(g) pushする。
-
GitHubや GitBucketでは、必要に応じて pull requestを作成する。 他のメンバからの pushによるコードの登録があれば、 (e)/(h) fetchして (f) mergeを行なう。
-
ローカルレポジトリで機能開発や不具合修正は、 (i) branchを作成して行なう。(GitHub Flow等)
この DSLの記載例を以下に示します。
git { repository = '.' // (1) filepattern = ['git.gradle', 'README.adoc', 'LICENSE-2.0.txt', 'readme_images'] // (2) user_name = 'nobusugi246' // (3) user_email = '[email protected]' // (4) remote = 'https://github.com/nobusugi246/gradle-jgit-plugin.git' // (5) upstream = '' // (6) acount = 'nobusugi246' // (7) password = 'xxx' // (8) middle = 'http://localhost:8080/git/xxx/gradle-jgit-plugin.git' // (9) middleAcount = 'xxx' // (10) middlePassword = 'xxx' // (11) comment = '' // (12) } githubFlow { topic = 'feature_xx' // (13) }
-
ローカルレポジトリを作成するフォルダ名
-
バージョン管理対象のファイル名やフォルダを指定する。
-
gitのユーザ名
-
gitのメールアドレス
-
GitHub等の Remote Repository。最初は空の Repositoryを作成する。
-
このユースケースでは不要。
-
GitHub(またはGitBucket等)のアカウント名
-
GitHub(またはGitBucket等)のパスワード
-
プライベートな Gitサーバへの URL
-
プライベートな Gitサーバのアカウント名
-
プライベートな Gitサーバのパスワード
-
commitするときのコメント。随時、commit時に記載する。
-
branchを作成するときの branch名
$ gradle --daemon -b git.gradle initG add commit middlePush
$ gradle --daemon -b git.gradle initTP (abbrev. of "initThenPush")
This Gradle Plugin is based on URLs below.