RedmineRepositories » History » Version 61

Go MAEDA, 2017-08-23 15:34
Passed all tests with Subversion 1.9.7.

1 1 Jean-Philippe Lang
h1. Repositories
2 1 Jean-Philippe Lang
3 19 Mischa The Evil
{{>toc}}
4 1 Jean-Philippe Lang
5 19 Mischa The Evil
h2. General information
6 1 Jean-Philippe Lang
7 38 Etienne Massip
Redmine natively supports integration with different SCM-tools:
8 1 Jean-Philippe Lang
9 38 Etienne Massip
|*SCM*|*Supported versions*|*Comments*|
10 57 Go MAEDA
|"Bazaar":http://bazaar.canonical.com/en/|1.0.0.candidate.1 to 2.7.0||
11 58 Go MAEDA
|"CVS":http://www.nongnu.org/cvs/|1.12.12, 1.12.13|1.12 required, won't work with CVSNT|
12 59 Go MAEDA
|"Git":https://git-scm.com/|1.5.4.2 to 2.11.0||
13 60 Go MAEDA
|"Mercurial":http://www.selenic.com/mercurial/|1.2 to 4.3.1|1.6 or higher recommended (#9465)|
14 61 Go MAEDA
|"Subversion":http://subversion.apache.org/|1.3 to 1.9.7|1.3 or higher required. Doesn't support Ruby Bindings for Subversion. Subversion 1.7.0 and 1.7.1 contains bugs (#9541)|
15 1 Jean-Philippe Lang
16 38 Etienne Massip
+Note 1+ : the appropriate binaries *must* be installed on the *same host as Redmine*.
17 9 Jean-Philippe Lang
18 38 Etienne Massip
For example, if you want to access Subversion repositories in Redmine, you'll have to install the svn binaries on the Redmine host.
19 1 Jean-Philippe Lang
20 38 Etienne Massip
+Note 2+ : the appropriate binaries must be reachable by Redmine :
21 38 Etienne Massip
22 38 Etienne Massip
2 options :
23 38 Etienne Massip
* they are directly available in the @PATH@ environment variable:
24 39 Etienne Massip
** if the command name is not the default one, you can redefine it in Redmine [[RedmineInstall#SCM-settings|configuration file]]
25 39 Etienne Massip
* you can define the full path to the binaries in Redmine [[RedmineInstall#SCM-settings|configuration file]] 
26 38 Etienne Massip
27 38 Etienne Massip
Finally, be sure to enable any SCM you wish to use globally in @Administration->Settings->Repositories->Enabled SCM@
28 1 Jean-Philippe Lang
29 1 Jean-Philippe Lang
h2. Attaching an existing repository to a project
30 1 Jean-Philippe Lang
31 1 Jean-Philippe Lang
In the project settings, make sure that the 'Repository' module is enabled and go to the 'Repository' tab.
32 34 Graham King
Select the SCM that corresponds to your repository and enter the path or URL of your repository.
33 1 Jean-Philippe Lang
34 1 Jean-Philippe Lang
*Important*: When you first browse the repository, Redmine retrieves the description of all of the existing commits and stores them in the database.
35 1 Jean-Philippe Lang
This is done only once per repository but can take a very long time (or even time out) if your repository has hundreds of commits.
36 19 Mischa The Evil
37 19 Mischa The Evil
To avoid this, you can do it offline.
38 19 Mischa The Evil
After having your repository declared in Redmine, run the following command:
39 1 Jean-Philippe Lang
<pre>
40 51 Etienne Massip
$ ./script/rails runner "Repository.fetch_changesets" -e production
41 1 Jean-Philippe Lang
</pre>
42 37 Etienne Massip
43 1 Jean-Philippe Lang
All commits will be retrieved in to the Redmine database.
44 37 Etienne Massip
45 37 Etienne Massip
Since version 0.9.x, you can also call an URL via WS to execute @fetch_changesets@ :
46 37 Etienne Massip
47 37 Etienne Massip
<pre>
48 28 Enderson Maia
http://redmine.example.com/sys/fetch_changesets?key=<WS key> (=> fetches changesets for all active projects)
49 37 Etienne Massip
http://redmine.example.com/sys/fetch_changesets?key=<WS key>&id=foo (=> fetches changesets for project foo only)
50 37 Etienne Massip
</pre>
51 37 Etienne Massip
52 28 Enderson Maia
Don't forget to append @WS key@ authentication information as described in [[Rest_api#Authentication|Rest_api#Authentication]].
53 1 Jean-Philippe Lang
54 1 Jean-Philippe Lang
See [[HowTo_setup_automatic_refresh_of_repositories_in_Redmine_on_commit]] for an example.
55 19 Mischa The Evil
56 1 Jean-Philippe Lang
h3. Subversion repository
57 19 Mischa The Evil
58 1 Jean-Philippe Lang
The usual protocols are supported (eg. @http:@, @svn:@, @file:@), just enter the URL of the repository.
59 1 Jean-Philippe Lang
60 1 Jean-Philippe Lang
For example:
61 1 Jean-Philippe Lang
<pre>
62 5 Jean-Philippe Lang
http://host/path/to/the/repository
63 5 Jean-Philippe Lang
</pre>
64 1 Jean-Philippe Lang
65 34 Graham King
You can specify a username and password if the repository requires authentication.
66 1 Jean-Philippe Lang
67 1 Jean-Philippe Lang
Note: if you want to access the repository using @svn+ssh://@, you'll have to configure svn+ssh to be non-interactive.
68 1 Jean-Philippe Lang
This requires you to setup a public/private key pair for ssh authentication.
69 1 Jean-Philippe Lang
70 1 Jean-Philippe Lang
h3. CVS repository
71 1 Jean-Philippe Lang
72 15 Azamat Hackimov
Enter:
73 19 Mischa The Evil
* the URL of the repository (it can be either a path or a connection string, eg. @:pserver@).
74 19 Mischa The Evil
* the module name
75 19 Mischa The Evil
76 19 Mischa The Evil
For example:
77 10 Thomas Lecavelier
<pre>
78 19 Mischa The Evil
:pserver:login:password@host:/path/to/the/repository
79 1 Jean-Philippe Lang
</pre>
80 19 Mischa The Evil
81 10 Thomas Lecavelier
h3. Git repository
82 19 Mischa The Evil
83 55 Jānis Elmeris
(See also [[HowTo_Easily_integrate_a_(SSH_secured)_GIT_repository_into_redmine]].)
84 55 Jānis Elmeris
85 19 Mischa The Evil
h4. Local environment setup
86 21 Mischa The Evil
87 40 Tomas Pospisek
Redmine requires a repository which is *bare* and *local* to enable browsing through Redmine.
88 10 Thomas Lecavelier
89 10 Thomas Lecavelier
Imagine you want to browse the to-do list manager project "Donebox": its clone URL is @git://github.com/ook/donebox.git@.
90 10 Thomas Lecavelier
On the server where you're running Redmine, create a directory accessible by the user running your Redmine server:
91 10 Thomas Lecavelier
<pre>
92 10 Thomas Lecavelier
$ sudo mkdir -p /var/redmine/git_repositories
93 10 Thomas Lecavelier
$ sudo chown rails:rails /var/redmine/git_repositories
94 19 Mischa The Evil
$ cd /var/redmine/git_repositories
95 1 Jean-Philippe Lang
</pre>
96 19 Mischa The Evil
97 19 Mischa The Evil
Note the second line: it changes the ownership of the newly created directory to the user @rails@ and the group @rails@. Of course, you have to replace it according to your server settings (it can be @www-data@, @apache@ or when you are having a very bad sysadmin: @root@). Keep in mind that this user needs to have the (local-)permissions to run the @git@ command.
98 19 Mischa The Evil
99 1 Jean-Philippe Lang
h4. Create the bare repository
100 1 Jean-Philippe Lang
101 1 Jean-Philippe Lang
After the preceding steps have been taken it is time to create our bare repository:
102 29 Burt Culver
<pre>
103 29 Burt Culver
$ pwd
104 1 Jean-Philippe Lang
/var/redmine/git_repositories
105 49 Etienne Massip
$ git clone --bare git://github.com/ook/donebox.git donebox.git
106 1 Jean-Philippe Lang
Initialized empty Git repository in /var/redmine/git_repositories/donebox.git/
107 1 Jean-Philippe Lang
remote: Counting objects: 401, done.
108 1 Jean-Philippe Lang
remote: Compressing objects: 100% (246/246), done.
109 29 Burt Culver
remote: Total 401 (delta 134), reused 401 (delta 134)
110 29 Burt Culver
Receiving objects: 100% (401/401), 179.55 KiB | 185 KiB/s, done.
111 1 Jean-Philippe Lang
Resolving deltas: 100% (134/134), done.
112 49 Etienne Massip
$ cd donebox.git
113 10 Thomas Lecavelier
</pre>
114 29 Burt Culver
115 50 @ go2null
Our bare repository is now created successfully! Now go to your Redmine project settings, go to the repositories tab and choose @git@ as the SCM, then put in the _Path to repository_ (in our example this is @/var/redmine/git_repositories/donebox.git/@) and save the settings. Have a look at your repository tab: you should now be able to browse your repository successfully.
116 50 @ go2null
117 50 @ go2null
Note: Per Defect #8548, if you set the _Report last commit for files and directories_, four columns are added on repository file an ddirectory lists:
118 50 @ go2null
* Revision
119 50 @ go2null
* Age
120 50 @ go2null
* Author
121 50 @ go2null
* Comment
122 25 Benoit Bénézech
123 53 Reinier Battenberg
Note: of course, this git repository won't update by itself. You'll have to @git fetch@ it regulary by hand, set up a cron job which will execute the @git fetch@-command automatically for you.
124 53 Reinier Battenberg
125 53 Reinier Battenberg
To have your repository (and all your branches) refresh every 10 minutes you can add a cronjob like:
126 53 Reinier Battenberg
<pre>
127 53 Reinier Battenberg
*/10 * * * * cd /srv/repos/git/myrepo.git && git fetch origin +refs/heads/*:refs/heads/* && git reset --soft
128 53 Reinier Battenberg
</pre>
129 53 Reinier Battenberg
130 53 Reinier Battenberg
Or you can use a post-receive hook, like this one : 
131 31 Stephen McGinty
132 1 Jean-Philippe Lang
<pre>
133 25 Benoit Bénézech
echo "Post receive-hook => updating Redmine repository"
134 31 Stephen McGinty
sudo -u my_redmine_user -p secret perl -we '`cd /redmine/repositories/my_repo.git && git fetch && git reset --soft refs/remotes/origin/master`'
135 29 Burt Culver
</pre>
136 29 Burt Culver
137 19 Mischa The Evil
Note the git reset, you'll *need it* to update the git tree and see your changes in the Repository view. The 'soft' option is required since it is a bare repository and the default option (mixed) will fail since there is no working tree.
138 22 Babar O'Cap
139 22 Babar O'Cap
If you are using github, you can use the [[Plugin_List#Github-Hook-plugin|Github Hook Plugin]]
140 22 Babar O'Cap
141 22 Babar O'Cap
h4. Bare repository on Windows
142 22 Babar O'Cap
143 22 Babar O'Cap
If your bare repository is install on *Windows*, adding :
144 33 Beau Simensen
<pre>;%GIT_PATH%\cmd;%GIT_PATH%\bin;</pre> to your %%PATH%% environment variable.
145 33 Beau Simensen
Where %%GIT_PATH%% is the install directory of Git (eg: _C:/Git_)
146 33 Beau Simensen
147 33 Beau Simensen
h4. Setting up a mirror repository (shortcut, tracking branches)
148 33 Beau Simensen
149 33 Beau Simensen
The method above works fine under most circumstances but it can take a lot of tweaking to get certain things working if you have more than just a master branch. More information on the problem and the solution can be found on this "Stack Overflow question":http://stackoverflow.com/questions/4698649/how-do-i-get-a-remote-tracking-branch-to-stay-up-to-date-with-remote-origin-in-a.
150 33 Beau Simensen
151 33 Beau Simensen
This method will help to keep branches from the repository's origin updated and visible in Redmine's repository browser. This is really only relevant if the local copy of the repository is only being used as a read-only copy specifically for Redmine's use. For example, the project is hosted on GitHub but Redmine is being used for issue tracking.
152 33 Beau Simensen
153 33 Beau Simensen
<pre>
154 33 Beau Simensen
$ pwd
155 33 Beau Simensen
/var/redmine/git_repositories
156 33 Beau Simensen
$ git clone --mirror git://github.com/ook/donebox.git donebox.git
157 33 Beau Simensen
Initialized empty Git repository in /var/redmine/git_repositories/donebox.git/
158 33 Beau Simensen
remote: Counting objects: 717, done.
159 33 Beau Simensen
remote: Compressing objects: 100% (561/561), done.
160 33 Beau Simensen
remote: Total 717 (delta 320), reused 371 (delta 134)
161 33 Beau Simensen
Receiving objects: 100% (717/717), 211.35 KiB | 86 KiB/s, done.
162 33 Beau Simensen
Resolving deltas: 100% (320/320), done.
163 33 Beau Simensen
$ cd donebox.git
164 33 Beau Simensen
$ git branch
165 33 Beau Simensen
  WW
166 33 Beau Simensen
  asap
167 33 Beau Simensen
  bugcat
168 33 Beau Simensen
  comeback
169 33 Beau Simensen
* master
170 33 Beau Simensen
</pre>
171 33 Beau Simensen
172 19 Mischa The Evil
This method relies on the @--mirror@ option available for the git clone command. This option may not be available to older versions of git. In that case, please reference the "Stack Overflow question":http://stackoverflow.com/questions/4698649/how-do-i-get-a-remote-tracking-branch-to-stay-up-to-date-with-remote-origin-in-a for some ideas on how to setup this type of mirror functionality without using the @--mirror@ option.
173 19 Mischa The Evil
174 23 Yannick Warnier
h3. Mercurial repository
175 23 Yannick Warnier
176 19 Mischa The Evil
To synchronize with a Mercurial repository, you will have to have a local clone of the repository on the same server you have Redmine installed on. Let's say you put Redmine in /var/www/redmine.example.com/www and have put your mercurial repository in /var/www/sources.example.com/repo/example, you would have to select *Mercurial* as a SCM, then enter */var/www/sources.example.com/repo/example* in the repository text box.
177 19 Mischa The Evil
178 1 Jean-Philippe Lang
This will start checking out the Mercurial repository, and you won't see the results straight away. Wait for a few seconds (or possibly minutes), and click the *Repository* tab of your project (not of your configuration settings). You should now see the results appear.
179 47 Simen Endsjø
180 47 Simen Endsjø
Redmine does not synchronize (push/pull) external repositories, but you can set up a script to do this before fetching updates. 
181 47 Simen Endsjø
hgsync.sh:
182 47 Simen Endsjø
<pre>
183 47 Simen Endsjø
#!/bin/bash
184 47 Simen Endsjø
for file in /var/www/sources.example.com/*; do
185 47 Simen Endsjø
   if [ -d $file ]; then
186 47 Simen Endsjø
      cd $file; hg pull -u
187 47 Simen Endsjø
   fi
188 47 Simen Endsjø
done
189 47 Simen Endsjø
</pre>
190 26 David Muir
191 26 David Muir
h3. Bazaar repository
192 26 David Muir
193 26 David Muir
Put in the full path to your repository in "Root directory"
194 26 David Muir
i.e. /home/username/bzr/repo/trunk
195 26 David Muir
196 26 David Muir
197 26 David Muir
You'll need to make sure that bzr and bzrlib can be found in ENV['PATH'] and ENV['PYTHONPATH'] respectively.
198 26 David Muir
ie. edit config/environment.rb and add:
199 26 David Muir
200 26 David Muir
<pre>
201 19 Mischa The Evil
ENV['PYTHONPATH'] = '/path/to/pythonlib'
202 1 Jean-Philippe Lang
ENV['PATH'] = "#{ENV['PATH']}:/path/to/bzr/bin"
203 21 Mischa The Evil
</pre>
204 32 Mischa The Evil
205 32 Mischa The Evil
206 1 Jean-Philippe Lang
h2. Repository user-mapping
207 1 Jean-Philippe Lang
208 41 alan blount
In the project -> settings -> repository there is a link called users (on the lower right). 
209 41 alan blount
210 41 alan blount
That allows you to map users that have commits to the users in redmine. If the login name / email matches the mapping is automatic, otherwise you need to establish the map of repository users to redmine users. 
211 41 alan blount
212 41 alan blount
This is required for time tracking to work.