Jason Shultz
Jason Shultz

Reputation: 970

How can I get revisions and git issue linking working in Redmine?

I have read so many things about how to integrate Git into Redmine. I've tried the git-hook plugin but it still didn't show revisions or issues tied to commits. Here's what I have right now:

Every 5 minutes these two cron jobs run:

*/5 * * * * deploy cd /home/deploy/github_repo/ && ./git_checker.sh
*/5 * * * * deploy cd /home/deploy/apps-available/redmine/ && ./bin/rails runner "Repository.fetch_changesets" -e production

The git_checker.sh file in the first cron job looks like this:

#! /bin/bash
now="$(date +'%d/%m/%Y %T')"
echo "-------------------------------"
for d in */ ; do
        now="$(date +'%d/%m/%Y %T')"
        cd $d && git fetch origin +refs/heads/*:refs/heads/* && git reset --soft
        cd ..
        echo "Excuted in $d at $now"
echo "-------------------------------"
done >> output_file

The output file is just checking to see if it runs, which it does:

Excuted in project1.git/ at 21/07/2020 06:05:01
-------------------------------
Excuted in project2/ at 21/07/2020 06:05:02
-------------------------------
Excuted in project3-backend/ at 21/07/2020 06:05:03
-------------------------------
Excuted in project3-frontend.git/ at 21/07/2020 06:05:03
-------------------------------
Excuted in project4/ at 21/07/2020 06:05:04
-------------------------------

Here's the settings for repositories: [![Settings for Repositories][1]][1]

This is an example of what my projects repository settings look like: [![Settings for Project][2]][2]

Here's an example of a git commit I made. Notice I included IssueID in the commit message:

commit ad3cb36ad5478a55a455dfb0d17c127asdf34 (HEAD -> master, origin/master, origin/HEAD)
Author: Jason Shultz <[email protected]>
Date:   Mon Jul 20 22:58:30 2020 -0600

    IssueID 1996 testing repository linking

Here you can see the repository for the project. You'll see that there's no revision. [![Project Repository][3]][3]

Here you'll see the file I changed. It shows revision numbers, but if I click on them I get a 404. [![File that was changed][4]][4]

The History tab is empty when I click on the file that changed.

--- ENVIRONMENT ---

sh: 1: svn: not found
sh: 1: hg: not found
sh: 1: cvs: not found
sh: 1: bzr: not found
Environment:
  Redmine version                4.1.0.devel
  Ruby version                   2.6.5-p114 (2019-10-01) [x86_64-linux]
  Rails version                  5.2.4.2
  Environment                    production
  Database adapter               Mysql2
  Mailer queue                   ActiveJob::QueueAdapters::AsyncAdapter
  Mailer delivery                smtp
SCM:
  Git                            2.17.1
  Filesystem
Redmine plugins:
  additionals                    2.0.23
  redmine_agile                  1.5.3
  redmine_checklists             3.1.16
  redmine_contacts               4.3.0
  redmine_edit_custom_fields     0.0.5
  redmine_github_hook            3.0.1
  redmine_pretend                2.0.1
  redmine_user_import            0.1.0

EDIT 07/21/2020 7:49pm

Per @jkraemer's question. I made a simple change, and in my commit message I put: git commit -m 'IssueID #1996: test test'

I tailed the log file I ran ./bin/rails runner "Repository.fetch_changesets" -e production.

The log file output:

Creating scope :system. Overwriting existing method Enumeration.system.
Creating scope :sorted. Overwriting existing method Group.sorted.
Creating scope :sorted. Overwriting existing method User.sorted.
Starting Pretend plugin for RedMine
Creating scope :visible. Overwriting existing method Principal.visible.
Creating scope :visible. Overwriting existing method AgileQuery.visible.
Creating scope :visible. Overwriting existing method PeopleQuery.visible.

Also, I noticed that the repository in Redmine did not show any updates. It still showed the version of the file from before. (I also doubled checked to make sure I did push the code.)

EDIT 07/23/2020

I changed the debug level, tried syncing again, and got a way more impressive log out:

Completed 200 OK in 2234ms (Views: 1673.8ms | ActiveRecord: 448.1ms)
   (0.6ms)  SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
Creating scope :system. Overwriting existing method Enumeration.system.
Creating scope :sorted. Overwriting existing method Group.sorted.
Creating scope :sorted. Overwriting existing method User.sorted.
  AnonymousUser Load (0.7ms)  SELECT  `users`.* FROM `users` WHERE `users`.`type` IN ('AnonymousUser') AND `users`.`lastname` = 'Anonymous' LIMIT 1
Starting Pretend plugin for RedMine
  Setting Load (0.7ms)  SELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'plugin_additionals' ORDER BY `settings`.`id` DESC LIMIT 1
Creating scope :visible. Overwriting existing method Principal.visible.
Creating scope :visible. Overwriting existing method AgileQuery.visible.
Creating scope :visible. Overwriting existing method PeopleQuery.visible.
Started GET "/github_hook?project_id=intertracker-frontend" for 140.82.115.147 at 2020-07-23 21:54:39 +0000
Processing by GithubHookController#welcome as */*
  Parameters: {"project_id"=>"intertracker-frontend"}
   (0.7ms)  SET NAMES utf8,  @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'),  @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
   (0.6ms)  SELECT MAX(`settings`.`updated_on`) FROM `settings`
  Setting Load (0.6ms)  SELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'rest_api_enabled' ORDER BY `settings`.`id` DESC LIMIT 1
  AnonymousUser Load (0.6ms)  SELECT  `users`.* FROM `users` WHERE `users`.`type` IN ('AnonymousUser') AND `users`.`lastname` = 'Anonymous' LIMIT 1
  Current user: anonymous
  Setting Load (0.5ms)  SELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'force_default_language_for_anonymous' ORDER BY `settings`.`id` DESC LIMIT 1
  Setting Load (0.5ms)  SELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'default_language' ORDER BY `settings`.`id` DESC LIMIT 1
  Rendering plugins/redmine_github_hook/app/views/github_hook/welcome.html.erb within layouts/base
  Rendered plugins/redmine_github_hook/app/views/github_hook/welcome.html.erb within layouts/base (0.7ms)
  Setting Load (0.8ms)  SELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'app_title' ORDER BY `settings`.`id` DESC LIMIT 1
  Setting Load (0.6ms)  SELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'ui_theme' ORDER BY `settings`.`id` DESC LIMIT 1
  Setting Load (0.8ms)  SELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'default_users_hide_mail' ORDER BY `settings`.`id` DESC LIMIT 1
  Setting Load (0.6ms)  SELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'default_users_time_zone' ORDER BY `settings`.`id` DESC LIMIT 1
  Rendered plugins/redmine_pretend/app/views/user/_unpretend.html.erb (0.5ms)
  Rendered plugins/additionals/app/views/additionals/_html_head.html.slim (10.2ms)
  Setting Load (0.7ms)  SELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'gravatar_enabled' ORDER BY `settings`.`id` DESC LIMIT 1
  Rendered plugins/additionals/app/views/additionals/_body_top.slim (2.2ms)
  Setting Load (0.7ms)  SELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'login_required' ORDER BY `settings`.`id` DESC LIMIT 1
  Setting Load (0.6ms)  SELECT  `settings`.* FROM `settings` WHERE `settings`.`name` = 'self_registration' ORDER BY `settings`.`id` DESC LIMIT 1
  Role Load (0.8ms)  SELECT DISTINCT `roles`.* FROM `roles` INNER JOIN `member_roles` ON `member_roles`.`role_id` = `roles`.`id` INNER JOIN `members` ON `members`.`id` = `member_roles`.`member_id` INNER JOIN `projects` ON `projects`.`id` = `members`.`project_id` WHERE (projects.status <> 9) AND `members`.`user_id` = 4
  Role Load (0.5ms)  SELECT  `roles`.* FROM `roles` WHERE `roles`.`builtin` = 2 LIMIT 1
  GroupAnonymous Load (0.6ms)  SELECT  `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
   (0.8ms)  SELECT `users`.`id` FROM `users` WHERE `users`.`type` IN ('GroupAnonymous')
   (0.7ms)  SELECT `members`.`user_id`, `role_id`, `members`.`project_id` FROM `members` INNER JOIN `projects` ON `projects`.`id` = `members`.`project_id` INNER JOIN `member_roles` ON `member_roles`.`member_id` = `members`.`id` WHERE (projects.status <> 9) AND (members.user_id = 4 OR (projects.is_public = TRUE AND members.user_id = 2))
  EnabledModule Exists (0.6ms)  SELECT  1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'issue_tracking' LIMIT 1
  GroupAnonymous Load (0.6ms)  SELECT  `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
  EnabledModule Exists (0.6ms)  SELECT  1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'gantt' LIMIT 1
  GroupAnonymous Load (0.6ms)  SELECT  `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
  EnabledModule Exists (0.6ms)  SELECT  1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'calendar' LIMIT 1
  GroupAnonymous Load (0.6ms)  SELECT  `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
  EnabledModule Exists (0.6ms)  SELECT  1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'news' LIMIT 1
  Rendered plugins/additionals/app/views/additionals/_content.html.slim (2.5ms)
  Rendered plugins/additionals/app/views/additionals/_body_bottom.html.slim (2.7ms)
  Rendered plugins/redmine_people/app/views/common/_people_select2_data.html.erb (0.7ms)
  Rendered plugins/redmine_people/app/views/common/_layout_bottom.html.erb (6.8ms)
Completed 200 OK in 1048ms (Views: 170.6ms | ActiveRecord: 23.8ms)

EDIT 07/24/2020

Here's the irb output:

irb(main):031:0> Repository.find(45).fetch_changesets
  Repository Load (0.7ms)  SELECT  `repositories`.* FROM `repositories` WHERE `repositories`.`id` = 45 LIMIT 1
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'branch' '--no-color' '--verbose' '--no-abbrev'
  Changeset Exists (0.6ms)  SELECT  1 AS one FROM `changesets` WHERE `changesets`.`repository_id` = 45 LIMIT 1
   (0.4ms)  BEGIN
  Repository Exists (0.5ms)  SELECT  1 AS one FROM `repositories` WHERE `repositories`.`identifier` = BINARY 'intertracker-frontend' AND `repositories`.`id` != 45 AND `repositories`.`project_id` = 117 LIMIT 1
   (0.4ms)  COMMIT
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'log' '--no-color' '--encoding=UTF-8' '--raw' '--date=iso' '--pretty=fuller' '--parents' '--stdin' '--no-renames' '--reverse'
=> nil

And here's the corresponding tail log:

Repository Load (0.7ms)  SELECT  `repositories`.* FROM `repositories` WHERE `repositories`.`id` = 45 LIMIT 1
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'branch' '--no-color' '--verbose' '--no-abbrev'
  Changeset Exists (0.6ms)  SELECT  1 AS one FROM `changesets` WHERE `changesets`.`repository_id` = 45 LIMIT 1
   (0.4ms)  BEGIN
  Repository Exists (0.5ms)  SELECT  1 AS one FROM `repositories` WHERE `repositories`.`identifier` = BINARY 'intertracker-frontend' AND `repositories`.`id` != 45 AND `repositories`.`project_id` = 117 LIMIT 1
   (0.4ms)  COMMIT
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'log' '--no-color' '--encoding=UTF-8' '--raw' '--date=iso' '--pretty=fuller' '--parents' '--stdin' '--no-renames' '--reverse'

It doesn't actually fetch the changes from the github repo. IF I manually run:

git fetch origin +refs/heads/*:refs/heads/* && git reset --soft

then it does pull the code, then run the above command again to fetch changesets:

Repository Load (0.8ms)  SELECT  `repositories`.* FROM `repositories` WHERE `repositories`.`id` = 45 LIMIT 1
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'branch' '--no-color' '--verbose' '--no-abbrev'
  Changeset Exists (0.6ms)  SELECT  1 AS one FROM `changesets` WHERE `changesets`.`repository_id` = 45 LIMIT 1
   (0.4ms)  BEGIN
  Repository Exists (0.5ms)  SELECT  1 AS one FROM `repositories` WHERE `repositories`.`identifier` = BINARY 'intertracker-frontend' AND `repositories`.`id` != 45 AND `repositories`.`project_id` = 117 LIMIT 1
   (0.4ms)  COMMIT
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'log' '--no-color' '--encoding=UTF-8' '--raw' '--date=iso' '--pretty=fuller' '--parents' '--stdin' '--no-renames' '--reverse'
=> nil
irb(main):085:0> Repository.find(45).fetch_changesets
  Repository Load (0.9ms)  SELECT  `repositories`.* FROM `repositories` WHERE `repositories`.`id` = 45 LIMIT 1
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'branch' '--no-color' '--verbose' '--no-abbrev'
  Changeset Exists (0.6ms)  SELECT  1 AS one FROM `changesets` WHERE `changesets`.`repository_id` = 45 LIMIT 1
   (0.5ms)  BEGIN
  Repository Exists (0.5ms)  SELECT  1 AS one FROM `repositories` WHERE `repositories`.`identifier` = BINARY 'intertracker-frontend' AND `repositories`.`id` != 45 AND `repositories`.`project_id` = 117 LIMIT 1
   (0.4ms)  COMMIT
Shelling out: 'git' '--git-dir' '/home/deploy/github_repo/intertracker-frontend.git' '-c' 'core.quotepath=false' '-c' 'log.decorate=no' 'log' '--no-color' '--encoding=UTF-8' '--raw' '--date=iso' '--pretty=fuller' '--parents' '--stdin' '--no-renames' '--reverse'
=> nil

I have the github-hook plugin installed. it's the one that uses the post commit hook to pull the code, etc. If I push the code to the repo, I do see the hook trigger and the following output happens:

Started GET "/github_hook?project_id=intertracker-frontend" for 140.82.115.155 at 2020-07-24 21:35:12 +0000
Processing by GithubHookController#welcome as */*
  Parameters: {"project_id"=>"intertracker-frontend"}
   (0.6ms)  SELECT MAX(`settings`.`updated_on`) FROM `settings`
  AnonymousUser Load (0.6ms)  SELECT  `users`.* FROM `users` WHERE `users`.`type` IN ('AnonymousUser') AND `users`.`lastname` = 'Anonymous' LIMIT 1
  Current user: anonymous
  Rendering plugins/redmine_github_hook/app/views/github_hook/welcome.html.erb within layouts/base
  Rendered plugins/redmine_github_hook/app/views/github_hook/welcome.html.erb within layouts/base (0.2ms)
  Rendered plugins/redmine_pretend/app/views/user/_unpretend.html.erb (0.1ms)
  Rendered plugins/additionals/app/views/additionals/_html_head.html.slim (0.6ms)
  Rendered plugins/additionals/app/views/additionals/_body_top.slim (0.1ms)
  Role Load (1.0ms)  SELECT DISTINCT `roles`.* FROM `roles` INNER JOIN `member_roles` ON `member_roles`.`role_id` = `roles`.`id` INNER JOIN `members` ON `members`.`id` = `member_roles`.`member_id` INNER JOIN `projects` ON `projects`.`id` = `members`.`project_id` WHERE (projects.status <> 9) AND `members`.`user_id` = 4
  Role Load (0.5ms)  SELECT  `roles`.* FROM `roles` WHERE `roles`.`builtin` = 2 LIMIT 1
  GroupAnonymous Load (0.6ms)  SELECT  `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
   (0.9ms)  SELECT `users`.`id` FROM `users` WHERE `users`.`type` IN ('GroupAnonymous')
   (0.5ms)  SELECT `members`.`user_id`, `role_id`, `members`.`project_id` FROM `members` INNER JOIN `projects` ON `projects`.`id` = `members`.`project_id` INNER JOIN `member_roles` ON `member_roles`.`member_id` = `members`.`id` WHERE (projects.status <> 9) AND (members.user_id = 4 OR (projects.is_public = TRUE AND members.user_id = 2))
  EnabledModule Exists (0.6ms)  SELECT  1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'issue_tracking' LIMIT 1
  CACHE GroupAnonymous Load (0.0ms)  SELECT  `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
  EnabledModule Exists (0.5ms)  SELECT  1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'gantt' LIMIT 1
  CACHE GroupAnonymous Load (0.0ms)  SELECT  `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
  EnabledModule Exists (0.5ms)  SELECT  1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'calendar' LIMIT 1
  CACHE GroupAnonymous Load (0.0ms)  SELECT  `users`.* FROM `users` WHERE `users`.`type` IN ('GroupAnonymous') ORDER BY id LIMIT 1
  EnabledModule Exists (0.6ms)  SELECT  1 AS one FROM `enabled_modules` WHERE `enabled_modules`.`project_id` IN (SELECT `projects`.`id` FROM `projects` WHERE (((projects.status <> 9) AND ((projects.is_public = TRUE AND projects.id NOT IN (SELECT project_id FROM members WHERE user_id IN (4,2))))))) AND `enabled_modules`.`name` = 'news' LIMIT 1
  Rendered plugins/additionals/app/views/additionals/_content.html.slim (0.2ms)
  Rendered plugins/additionals/app/views/additionals/_body_bottom.html.slim (0.1ms)
  Rendered plugins/redmine_people/app/views/common/_people_select2_data.html.erb (0.3ms)
  Rendered plugins/redmine_people/app/views/common/_layout_bottom.html.erb (0.5ms)
Completed 200 OK in 23ms (Views: 13.3ms | ActiveRecord: 7.0ms)

But if I go to the repo in the project, it's not updated. :( [1]: https://i.sstatic.net/y87jo.png [2]: https://i.sstatic.net/CWaIv.png [3]: https://i.sstatic.net/1uqnM.png [4]: https://i.sstatic.net/SO2m7.png

Edit 08/02/2020

Looking for NGINX:

~$ ps aux | grep nginx
root      1115  0.0  0.4 230692 19236 ?        Ss   Jul01   0:04 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 17569  0.0  0.4 232988 18636 ?        S    Aug02   0:00 nginx: worker process
www-data 17570  0.0  0.4 232988 18360 ?        S    Aug02   0:00 nginx: worker process
deploy   31000  0.0  0.0  14852  1116 pts/1    S+   04:03   0:00 grep --color=auto nginx

Looking for Ruby:

~$ ps aux | grep ruby
deploy   30982  0.0  0.0  14852  1096 pts/1    S+   04:03   0:00 grep --color=auto ruby
as root: # ps aux|grep ruby
root     31890  0.0  0.0  14852  1012 pts/1    S+   04:24   0:00 grep --color=auto ruby

Upvotes: 0

Views: 740

Answers (1)

jkraemer
jkraemer

Reputation: 357

Making this an answer now due to length and formatting constraints on comments...

Permissions

Common issue, but I would have expected something to blow up with an error message somewhere if the repo wasn't readable or so. Anyway, check your nginx config for the user your Redmine is configured to run as. You should use the same user for your cronjobs (so change deploy there to nginx or whatever your actual user is). Anything you are trying out manually should also be done as that user. The whole repository should be owned by that user as well.

This is the simplest setup, of course you can get fancy with different users and groups etc, but save that for once you got the simple case working.

Use a bare repository

The Redmine docs on the topic are pretty clear that you have to use a bare repository. This does not seem the case with your repo. I am not sure but it might make a difference.

Plugins etc

To reduce the number of unknowns, try out all of the above with a vanilla Redmine, on a local machine, and proceed from there. Sometimes a plugin changes the way things work, sometimes plugins introduce bugs. Importing change sets from a local, bare git repo is a core functionality that does not need any additional plugins. Once you got that working, you can start to add things left and right, hooks, plugins, cron jobs, to automate the process of creating the bare repository, keeping it updated, importing the change sets. But all that has to wait until you got the basic manual steps working.

Upvotes: 1

Related Questions