clerq 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (69) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +12 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +6 -0
  5. data/Gemfile.lock +24 -0
  6. data/README.md +269 -0
  7. data/Rakefile +10 -0
  8. data/TODO.md +3 -0
  9. data/bin/console +14 -0
  10. data/bin/setup +8 -0
  11. data/clerq.gemspec +44 -0
  12. data/exe/clerq +8 -0
  13. data/lib/assets/new/README.md.tt +75 -0
  14. data/lib/assets/new/clerq.thor.tt +15 -0
  15. data/lib/assets/new/clerq.yml.tt +4 -0
  16. data/lib/assets/new/content.md.tt +41 -0
  17. data/lib/assets/promo/README.md +40 -0
  18. data/lib/assets/promo/bin/Clerq SRS.docx +0 -0
  19. data/lib/assets/promo/bin/Clerq SRS.md +579 -0
  20. data/lib/assets/promo/bin/assets/promo_dark.png +0 -0
  21. data/lib/assets/promo/bin/assets/promo_light.png +0 -0
  22. data/lib/assets/promo/clerq.yml +3 -0
  23. data/lib/assets/promo/promo.thor +58 -0
  24. data/lib/assets/promo/src/clerq.md +82 -0
  25. data/lib/assets/promo/src/fr/cmp.node.md +14 -0
  26. data/lib/assets/promo/src/fr/cmp.repo.md +10 -0
  27. data/lib/assets/promo/src/fr/cmp.tt.md +20 -0
  28. data/lib/assets/promo/src/fr/cmp.writer.md +19 -0
  29. data/lib/assets/promo/src/fr/ent.md +32 -0
  30. data/lib/assets/promo/src/ui/cli/cli.bld.md +32 -0
  31. data/lib/assets/promo/src/ui/cli/cli.chk.md +17 -0
  32. data/lib/assets/promo/src/ui/cli/cli.hlp.md +14 -0
  33. data/lib/assets/promo/src/ui/cli/cli.new.md +20 -0
  34. data/lib/assets/promo/src/ui/cli/cli.opt.md +11 -0
  35. data/lib/assets/promo/src/ui/cli/cli.ver.md +4 -0
  36. data/lib/assets/promo/src/ui/ui.cli.md +8 -0
  37. data/lib/assets/promo/src/us/us.reader.md +8 -0
  38. data/lib/assets/promo/src/us/us.writer.md +79 -0
  39. data/lib/assets/tt/default.md.erb +64 -0
  40. data/lib/assets/tt/gitlab.md.erb +93 -0
  41. data/lib/assets/tt/pandoc.md.erb +88 -0
  42. data/lib/assets/tt/raw.md.erb +23 -0
  43. data/lib/clerq.rb +41 -0
  44. data/lib/clerq/cli.rb +129 -0
  45. data/lib/clerq/entities.rb +2 -0
  46. data/lib/clerq/entities/node.rb +135 -0
  47. data/lib/clerq/entities/template.rb +19 -0
  48. data/lib/clerq/gateways.rb +3 -0
  49. data/lib/clerq/gateways/gateway.rb +17 -0
  50. data/lib/clerq/gateways/in_files.rb +36 -0
  51. data/lib/clerq/gateways/in_memory.rb +35 -0
  52. data/lib/clerq/interactors.rb +5 -0
  53. data/lib/clerq/interactors/check_nodes.rb +81 -0
  54. data/lib/clerq/interactors/compile_nodes.rb +31 -0
  55. data/lib/clerq/interactors/create_node.rb +40 -0
  56. data/lib/clerq/interactors/interactor.rb +28 -0
  57. data/lib/clerq/interactors/join_nodes.rb +59 -0
  58. data/lib/clerq/interactors/query_nodes.rb +62 -0
  59. data/lib/clerq/properties.rb +21 -0
  60. data/lib/clerq/repositories.rb +5 -0
  61. data/lib/clerq/repositories/in_memory.rb +45 -0
  62. data/lib/clerq/repositories/node_reader.rb +107 -0
  63. data/lib/clerq/repositories/node_repository.rb +56 -0
  64. data/lib/clerq/repositories/repository.rb +11 -0
  65. data/lib/clerq/repositories/template_repository.rb +53 -0
  66. data/lib/clerq/settings.rb +56 -0
  67. data/lib/clerq/templater.rb +32 -0
  68. data/lib/clerq/version.rb +3 -0
  69. metadata +172 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: d95f522537af88379a6881b154fc50453973102601db1cb4be573f655a33a78d
4
+ data.tar.gz: cb5e26ff19ff66d0ecc6364decb2caaee046c763956fdd2c39b9e71e932c6abb
5
+ SHA512:
6
+ metadata.gz: 2ce20279f674973d75ab59d1cdaf474248459a442dd58eeebb9980c1d59fe4c687c7956e72bade7be78b9b5134b595e35e3859d5a983cb009afcb17481a47ff5
7
+ data.tar.gz: 55b67ea4ef4b43285c6c5eb51b49d2c3fb2cdef7f323dfe897a4e8a9ecd5644d3b6b3ee563ab78bc06291a2cdc9a3b6ed9e2bcc784669bc842438ac0f96a42b1
@@ -0,0 +1,12 @@
1
+ /lib/sandbox/
2
+ /test/.sandbox/
3
+ /.imdone/
4
+ /.bundle/
5
+ /.yardoc
6
+ /_yardoc/
7
+ /coverage/
8
+ /doc/
9
+ /pkg/
10
+ /spec/reports/
11
+ /test/tmp/
12
+ /tmp/
@@ -0,0 +1,7 @@
1
+ ---
2
+ sudo: false
3
+ language: ruby
4
+ cache: bundler
5
+ rvm:
6
+ - 2.6.5
7
+ before_install: gem install bundler -v 1.17.3
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source "https://rubygems.org"
2
+
3
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
4
+
5
+ # Specify your gem's dependencies in clerq.gemspec
6
+ gemspec
@@ -0,0 +1,24 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ clerq (0.1.0)
5
+ thor (~> 0.20.3)
6
+
7
+ GEM
8
+ remote: https://rubygems.org/
9
+ specs:
10
+ minitest (5.13.0)
11
+ rake (10.5.0)
12
+ thor (0.20.3)
13
+
14
+ PLATFORMS
15
+ x64-mingw32
16
+
17
+ DEPENDENCIES
18
+ bundler (~> 1.17)
19
+ clerq!
20
+ minitest (~> 5.0)
21
+ rake (~> 10.0)
22
+
23
+ BUNDLED WITH
24
+ 1.17.3
@@ -0,0 +1,269 @@
1
+ # Clerq
2
+
3
+ Gem `clerq` represents an unusual but effective way of writing and managing requirements. It resembles some static site builders and was inspired by those. Actually this gem provides the ability to write requirements in separate files and combine those to a unified consistent requirements source for any future purposes.
4
+
5
+ Sounds too simple? Combine it with a modern text editor that supports markdown, place repository under `Git`, install `Pandoc` to convert it to any supported format. Create your own commands through `Thor` to automate every piece of work that can be automated. Give it a try!
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'clerq'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install clerq
22
+
23
+ ## Usage
24
+
25
+ To see the list of all standard clerq commands type in console `clerq help` and follow the printed instructions.
26
+
27
+ To see the list of all specific for the project commands type `thor help <project>`
28
+
29
+ Actually the best way to start with Clerq is to see it in action through [Promo](#promo). Just start from copying promo content and running some commands.
30
+
31
+ ### Creating new project
32
+
33
+ To create a new project run `new` command:
34
+
35
+ $ clerq new <project_name>
36
+
37
+ ### Create new item
38
+
39
+ The simplest way of adding new items to the project is to add a new file to the `src` directory. Of course, Clerq also provides the command `node`
40
+
41
+ $ clerq node ID [TITLE] [-t TEMPLATE]
42
+
43
+ __Assets__
44
+
45
+ If you are using images or other assets, you should place it to `bin/assets` directory and write markdown link like `![img](assets/img.png)`
46
+
47
+ __Templates__
48
+
49
+ You also can prepare your own templates it `tt` folder and provide template through `-t/--template` option. The content of the template file will be placed on the body of the requirement.
50
+
51
+ ### Check repository
52
+
53
+ Because of lots of handwriting there can be some specific errors in repository. The most obvious are:
54
+
55
+ * non-unique requirements identifiers;
56
+ * links to and id that does not exist:
57
+ * for `parent` attribute;
58
+ * in `order_index`;
59
+ * in `body`.
60
+
61
+ The system provides command `clerq check` that will check the repository for these kinds of errors.
62
+
63
+ $ clerq check
64
+
65
+ ### Build project
66
+
67
+ Clerq provides the ability to combine all requirements from the project repository and create final document. To create such document you can use `clerq build` command:
68
+
69
+ $ clerq build
70
+
71
+ It will create final document with default file name, title, and by default erb template. These default values are defined in `clerq.yml` and you should change it according to your aim.
72
+
73
+ Default values of final document parameters are:
74
+
75
+ * `document: <project_name>`;
76
+ * `template: default.md.erb`;
77
+ * `title: <project_name>`.
78
+
79
+ You also can specify these settings through `clerq build` options:
80
+
81
+ * `-t/--template TEMPLATE` provides the ability to specify template;
82
+ * `-o/--output FILE_NAME` provides the ability to specify output file name.
83
+
84
+ __Query requirements__
85
+
86
+ Clerq also provides ability to query requirements that meet query criteria. To query requirements you should use `-q/--query QUERY_STRING` where `QUERY_STRING` is ruby code that will test if each node meets the `QUERY_STRING`. For example, `node.tile == 'Functional requirements'` or `node.id == 'us'`.
87
+
88
+ ### Print TOC
89
+
90
+ Sometimes it helpful to check repository structure by `clerq toc` command. The command also supports `-q/--query QUERY_STRING` option.
91
+
92
+ ## Known issues
93
+
94
+ ### Failed test
95
+
96
+ Some tests of CLI fail by `$ bundle exec rake test` but pass individually one by one through `$ bundle exec rake test TEST=test/cli/cli_build_spec.rb` and I haven't caught the reason.
97
+
98
+ ### Thor version
99
+
100
+ The one issue I certain in is when you are using different version of thor, your custom scripts won't work.
101
+
102
+ ## Structure
103
+
104
+ ### Project
105
+
106
+ The Clerq project has the following folders structure by default (that will be created by `clerq new <project>`):
107
+
108
+ * `bin/` - for output documents;
109
+ * `bin/assets` - for assets;
110
+ * `knb/` - knowledge base;
111
+ * `lib/` - place for Ruby code;
112
+ * `src/` - place for requirements;
113
+ * `tt/` - templates;
114
+ * `<project>.thor` - file with automated tasks (see more in [Automating](#automating));
115
+ * `clerq.yml` - project settings;
116
+ * `README.md`.
117
+
118
+ ### Repository
119
+
120
+ Place requirements to the `src` folder. You can group your requirements by different folders and subfolders - Clerq load all the files of `src` including all subfolders at any level of nesting.
121
+
122
+ ### Node
123
+
124
+ Each requirement is a markdown file with a few additional compliances (will be explained below) where every file can contain any number of requirements. Let's meet some files ...
125
+
126
+ **content.md**
127
+
128
+ ```markdown
129
+ # 1 Introduction
130
+ {skip_meta: true}
131
+ ## 1.1 Purpose
132
+ ## 1.2 Scope
133
+ ## 1.3 References
134
+ ## 1.4 Definitions
135
+ ## 1.5 Overview
136
+ # [f] Requirements
137
+ # [i] Interfaces
138
+ # [n] Non-functional requirements
139
+ # [c] Design constraints
140
+ ```
141
+
142
+ **fm.md**
143
+
144
+ ```markdown
145
+ # [.fm] File manager
146
+ {{parent: f}}
147
+
148
+ The system shall provide the `File Manager` component. The component shall provide the following features:
149
+
150
+ {{@@list}}
151
+
152
+ ## Read folders structure
153
+ ## Read file content
154
+ ## Load ".md"
155
+ ## Load ".tt"
156
+ ```
157
+
158
+ #### Headers
159
+
160
+ Every requirement starts with markdown header. All the text between headers belongs to the requirement.
161
+
162
+ #### Identifiers
163
+
164
+ Each requirement must have its own unique identifier so that you can refer to it in other parts of the project. That's why the recommended practice is to put id straight into the header `# [requirement_id] requirement title`.
165
+
166
+ ID can start with one dot, like `[.suffix]`, and clerq will add parent requirement id before. For the followed example, `[.fm]` will be translated to `[cm.fm]`.
167
+
168
+ ```
169
+ # 3 Function requirements
170
+ ## [cm] Components
171
+ ### [.fm] File manager
172
+ ### Logger
173
+ ```
174
+
175
+ When an identifier is not provided, Clerq will generate it automatically, and you can combine requirements that have id and requirements that does not. For the example above, the `Logger` will be identified as `[cm.01] Logger`.
176
+
177
+ #### Attributes
178
+
179
+ The excerpt, the text in brackets `{{ }}` that follows by the header, contains requirement attributes. You can place here anything you need to provide additional information, like status, source, author, priority, etc. All the following examples are correct.
180
+
181
+ ```
182
+ # [r.1]
183
+ {{parent: r; skip_meta: true}}
184
+
185
+ # [r.2]
186
+ {{parent: r
187
+ skip_meta: true}}
188
+
189
+ # [r.3]
190
+ {{
191
+ parent: r
192
+ skip_meta: true
193
+ }}
194
+ ```
195
+
196
+ The next attributes are **system attributes** and these influence to Clerq behavior:
197
+
198
+ * `order_index: feature1 feature2` will sort child requirements in provided order;
199
+ * `parent: f` will place the requirement as a child of parent requirement `[f]`.
200
+
201
+ All other attributes (`status`, `source`, etc.) are **user attributes** and do not influence Clerq behavior. These attributes are holding in requirement's attributes and can be used for publishing or automation purpose. One of such `skip_meta: true` used producing output document.
202
+
203
+ #### Assets
204
+
205
+ If you need to add an image or some other material into a requirements body, put it in the `bin/assets` folder and specify the link
206
+
207
+ ```markdown
208
+ # [ent] Entities
209
+
210
+ ... the following picture shows conceptual entity relations diagram
211
+
212
+ ![Image](assets/er.png)
213
+ ```
214
+
215
+ ### Templating
216
+
217
+ To customize Clerq output the system provides `erb` templates. You have a lot of possibilities here if you are familiar with Ruby. Clerq distributions provides two basic templates - `default.md.erb` and `pandoc.md.erb`.
218
+
219
+ The first one combines all requirements to one document and there no requirements transformation actually.
220
+
221
+ The second one has a lot of features and provides a good example of how to add new features in the requirements body. It handles three macros:
222
+
223
+ * `{{@@list}}` - replaces the macro with the list of child requirements;
224
+ * `{{@@tree}}` - replaces the macro with the tree of child requirements;
225
+ * `{{@@skip}}` - skip all content inside the brackets.
226
+
227
+ `pandoc.md.erb` generates Pandoc markdown and can be used to convert the output of the template in any supported format. You also can use relative requirements links here. An example of using Pandoc to generate `docx` can be found in [Promo](#promo).
228
+
229
+ ### Automating
230
+
231
+ You can and should extend the standard Clerq CLI by your own commands. See `<project>.thor` file as an example and call for action. It is all the Ruby code and the main point is to get requirements collection and then transform it to anything you want. It is the `Thor` gem that does all work related to CLI.
232
+
233
+ You can find some examples of custom automating in [Promo](#promo), and I hope to provide some more examples in the future.
234
+
235
+ ## Promo
236
+
237
+ The clerq provides the promotion project `promo` than contains requirements to the clerq. You can copy the `promo` content to the current clerq repository by `clerq promo` command.
238
+
239
+ The promo provides few specific commands that created to show you the way how to extend clerq. See `promo.thor` for details.
240
+
241
+ ## History
242
+
243
+ During 4 years work for my previous employer I participated in dozen software development and software reengineering projects and developed dozen bulk SRS and SAD documents. All those documents were developed in MS Word as a corporate standard format for all project documentation. And every of those often cause some headache usually with casual losses of style formatting or dead halt of Microsoft Word.
244
+
245
+ When I left the employer, I decided to create a small toolkit for writing software documentation. The idea was to hold requirements in Yaml, each item in a separate file, and to provide reach features for effort estimation and prioritizing based on requirements. The first attempt was failed but brought some output. Throw out extra features! One item per file is a hell to author (but for a developer it was rather practical).
246
+
247
+ As the result of the first fail, the gem `Creq` was born. Exra features were thrown out. An author not limited to Yaml and uses Markdown now; he can write as many topics as he wants in one file. And for my new employer all requirements were developed in Creq. Some lessons were learn, some peculiarities were met, and then I decided to do some reengineering and developed Clerq. So here we are and now I have no claims to the subject of requirements writing and management.
248
+
249
+ * One Clerq project per one document!
250
+ * Document versioning and authors collaboration are under Git!
251
+ * Any text editor is suitable for requirements writing! Of course, markdown syntax highlighting feature is desired.
252
+ * Single consistent requirements source and many templates for final documents (I like to left "TBD", "TODO" and other comment for myself, reviewer, and developers but it cannot be left in documents releases.)
253
+ * All extra repeated job for certain project can be automated through Thor.
254
+
255
+ The last thing should be mentioned is drifting the original purpose of requirements management to compilation bulk documents from small pieces, and a requirement here is just a piece of text that can express just anything.
256
+
257
+ ## Development
258
+
259
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
260
+
261
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
262
+
263
+ ## Contributing
264
+
265
+ Bug reports and pull requests are welcome on GitHub at https://github.com/nvoynov/clerq.
266
+
267
+ ## License
268
+
269
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/testtask"
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << "test"
6
+ t.libs << "lib"
7
+ t.test_files = FileList["test/**/*_spec.rb"]
8
+ end
9
+
10
+ task :default => :test
data/TODO.md ADDED
@@ -0,0 +1,3 @@
1
+ % TODO
2
+
3
+ [ ] Fix minitest "DEPRECATE" warning
@@ -0,0 +1,14 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "clerq"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require "irb"
14
+ IRB.start(__FILE__)
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,44 @@
1
+
2
+ lib = File.expand_path("../lib", __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require "clerq/version"
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "clerq"
8
+ spec.version = Clerq::VERSION
9
+ spec.authors = ["Nikolay Voynov"]
10
+ spec.email = ["nvoynov@gmail.com"]
11
+
12
+ spec.summary = %q{Toolkit for requirements management}
13
+ spec.description = %q{The gem provides requirements markup; file based requirements project structure; document templates; customizable CLI for managing requirements projects.}
14
+ spec.homepage = "https://github.com/nvoynov/clerq"
15
+ spec.license = "MIT"
16
+
17
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
18
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
19
+ if spec.respond_to?(:metadata)
20
+ spec.metadata["allowed_push_host"] = "https://rubygems.org"
21
+
22
+ spec.metadata["homepage_uri"] = "https://github.com/nvoynov/clerq"
23
+ spec.metadata["source_code_uri"] = spec.homepage
24
+ spec.metadata["changelog_uri"] = spec.homepage + "/CHANGELOG.md"
25
+ else
26
+ raise "RubyGems 2.0 or newer is required to protect against " \
27
+ "public gem pushes."
28
+ end
29
+
30
+ # Specify which files should be added to the gem when it is released.
31
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
32
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
33
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
34
+ end
35
+ spec.bindir = "exe"
36
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
37
+ spec.require_paths = ["lib"]
38
+
39
+ spec.add_development_dependency "bundler", "~> 1.17"
40
+ spec.add_development_dependency "rake", "~> 10.0"
41
+ spec.add_development_dependency "minitest", "~> 5.0"
42
+
43
+ spec.add_runtime_dependency "thor", "~> 0.20.3"
44
+ end
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "clerq"
5
+
6
+ rpos = ARGV.index(">")
7
+ ARGV.pop(ARGV.length - rpos) unless rpos.nil?
8
+ Clerq::Cli.start(ARGV)
@@ -0,0 +1,75 @@
1
+ # <%=config[:project].capitalize%>
2
+
3
+ Welcome to new [Clerq](https://github.com/nvoynov/clerq) project "<%=config[:project]%>"!
4
+
5
+ ## Directories structure
6
+
7
+ This project has the following structure:
8
+
9
+ * [bin/](bin/) - output documents folder;
10
+ * [bin/assets/](bin/assets/) - documents assets folder;
11
+ * [src/](src/) - nodes folder;
12
+ * [lib/](lib/) - library folder;
13
+ * [tt/](tt/) - templates folder;
14
+ * [<%=config[:project]%>.thor](<%=config[:project]%>.thor) - file with custom tasks;
15
+ * [README.md](README.md) - this file.
16
+
17
+ ## Command Line Interface
18
+
19
+ To see standard commands enter the following command:
20
+
21
+ clerq -h
22
+
23
+ To see custom commands enter the following command:
24
+
25
+ thor <%=config[:project]%>:list
26
+
27
+ ## How to start
28
+
29
+ To start work with the project just clone the repository
30
+
31
+ git clone <repository>.git
32
+
33
+ or add remote if the folder exists
34
+
35
+ git remote add origin <repository>.git
36
+
37
+ ## Git workflow
38
+
39
+ [Git How To](https://githowto.com/)
40
+
41
+ Incorporates changes from a remote repository:
42
+
43
+ git pull
44
+
45
+ Create a new branch to start any activity with the repository:
46
+
47
+ git branch <branch_name>
48
+
49
+ Make changes and commit your work:
50
+
51
+ git add .
52
+ git commit -m "branch_name - commit description"
53
+
54
+ When your changes finished, incorporate changes from the remote repository and merge the `master` branch to your `branch_name`:
55
+
56
+ git checkout master
57
+ git pull
58
+ git checkout <branch_name>
59
+ git merge master
60
+
61
+ Resolve all conflicts and commit changes:
62
+
63
+ git add .
64
+ git commit -m "branch_name conflicts resolved"
65
+
66
+ Merge your changes to the `master` branch:
67
+
68
+ git checkout master
69
+ git merge <branch_name>
70
+
71
+ Push your changes to the remote repository:
72
+
73
+ git push
74
+
75
+ Create a merge request if you are not allowed to push to the `master` branch.