Project

General

Profile

RedmineRepositories » History » Version 54

Enderson Maia, 2015-01-09 20:55
if you did a @git clone@ the remote is already there

1 1 Jean-Philippe Lang
h1. Repositories
2
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 46 Mischa The Evil
|"Bazaar":http://bazaar-vcs.org/|1.0.0.candidate.1 & 2.0.4||
11 1 Jean-Philippe Lang
|"CVS":http://www.nongnu.org/cvs/|1.12.12|1.12 required, won't work with CVSNT|
12
|"Darcs":http://darcs.net/|1.0.7||
13 38 Etienne Massip
|"Git":http://git-scm.com|1.5.4.2||
14 46 Mischa The Evil
|"Mercurial":http://www.selenic.com/mercurial/|1.2|1.6 or higher recommended (#9465)|
15
|"Subversion":http://subversion.apache.org/|1.3, 1.4, 1.5, 1.6 & 1.7|1.3 or higher required. Doesn't support Ruby Bindings for Subversion. Subversion 1.7.0 and 1.7.1 contains bugs (#9541)|
16 1 Jean-Philippe Lang
17 38 Etienne Massip
+Note 1+ : the appropriate binaries *must* be installed on the *same host as Redmine*.
18 9 Jean-Philippe Lang
19 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.
20 1 Jean-Philippe Lang
21 38 Etienne Massip
+Note 2+ : the appropriate binaries must be reachable by Redmine :
22
23
2 options :
24
* they are directly available in the @PATH@ environment variable:
25 39 Etienne Massip
** if the command name is not the default one, you can redefine it in Redmine [[RedmineInstall#SCM-settings|configuration file]]
26
* you can define the full path to the binaries in Redmine [[RedmineInstall#SCM-settings|configuration file]] 
27 38 Etienne Massip
28
Finally, be sure to enable any SCM you wish to use globally in @Administration->Settings->Repositories->Enabled SCM@
29 1 Jean-Philippe Lang
30
h2. Attaching an existing repository to a project
31
32
In the project settings, make sure that the 'Repository' module is enabled and go to the 'Repository' tab.
33 34 Graham King
Select the SCM that corresponds to your repository and enter the path or URL of your repository.
34 1 Jean-Philippe Lang
35
*Important*: When you first browse the repository, Redmine retrieves the description of all of the existing commits and stores them in the database.
36
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.
37 19 Mischa The Evil
38
To avoid this, you can do it offline.
39
After having your repository declared in Redmine, run the following command:
40 1 Jean-Philippe Lang
<pre>
41 51 Etienne Massip
$ ./script/rails runner "Repository.fetch_changesets" -e production
42 1 Jean-Philippe Lang
</pre>
43 37 Etienne Massip
44 1 Jean-Philippe Lang
All commits will be retrieved in to the Redmine database.
45 37 Etienne Massip
46
Since version 0.9.x, you can also call an URL via WS to execute @fetch_changesets@ :
47
48
<pre>
49 28 Enderson Maia
http://redmine.example.com/sys/fetch_changesets?key=<WS key> (=> fetches changesets for all active projects)
50 37 Etienne Massip
http://redmine.example.com/sys/fetch_changesets?key=<WS key>&id=foo (=> fetches changesets for project foo only)
51
</pre>
52
53 28 Enderson Maia
Don't forget to append @WS key@ authentication information as described in [[Rest_api#Authentication|Rest_api#Authentication]].
54 1 Jean-Philippe Lang
55
See [[HowTo_setup_automatic_refresh_of_repositories_in_Redmine_on_commit]] for an example.
56 19 Mischa The Evil
57 1 Jean-Philippe Lang
h3. Subversion repository
58 19 Mischa The Evil
59 1 Jean-Philippe Lang
The usual protocols are supported (eg. @http:@, @svn:@, @file:@), just enter the URL of the repository.
60
61
For example:
62
<pre>
63 5 Jean-Philippe Lang
http://host/path/to/the/repository
64
</pre>
65 1 Jean-Philippe Lang
66 34 Graham King
You can specify a username and password if the repository requires authentication.
67 1 Jean-Philippe Lang
68
Note: if you want to access the repository using @svn+ssh://@, you'll have to configure svn+ssh to be non-interactive.
69
This requires you to setup a public/private key pair for ssh authentication.
70
71
h3. CVS repository
72
73 15 Azamat Hackimov
Enter:
74 19 Mischa The Evil
* the URL of the repository (it can be either a path or a connection string, eg. @:pserver@).
75
* the module name
76
77
For example:
78 10 Thomas Lecavelier
<pre>
79 19 Mischa The Evil
:pserver:login:password@host:/path/to/the/repository
80 1 Jean-Philippe Lang
</pre>
81 19 Mischa The Evil
82 10 Thomas Lecavelier
h3. Git repository
83 19 Mischa The Evil
84
h4. Local environment setup
85 21 Mischa The Evil
86 40 Tomas Pospisek
Redmine requires a repository which is *bare* and *local* to enable browsing through Redmine.
87 10 Thomas Lecavelier
88
Imagine you want to browse the to-do list manager project "Donebox": its clone URL is @git://github.com/ook/donebox.git@.
89
On the server where you're running Redmine, create a directory accessible by the user running your Redmine server:
90
<pre>
91
$ sudo mkdir -p /var/redmine/git_repositories
92
$ sudo chown rails:rails /var/redmine/git_repositories
93 19 Mischa The Evil
$ cd /var/redmine/git_repositories
94 1 Jean-Philippe Lang
</pre>
95 19 Mischa The Evil
96
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.
97
98 1 Jean-Philippe Lang
h4. Create the bare repository
99
100
After the preceding steps have been taken it is time to create our bare repository:
101 29 Burt Culver
<pre>
102
$ pwd
103 1 Jean-Philippe Lang
/var/redmine/git_repositories
104 49 Etienne Massip
$ git clone --bare git://github.com/ook/donebox.git donebox.git
105 1 Jean-Philippe Lang
Initialized empty Git repository in /var/redmine/git_repositories/donebox.git/
106
remote: Counting objects: 401, done.
107
remote: Compressing objects: 100% (246/246), done.
108 29 Burt Culver
remote: Total 401 (delta 134), reused 401 (delta 134)
109
Receiving objects: 100% (401/401), 179.55 KiB | 185 KiB/s, done.
110 1 Jean-Philippe Lang
Resolving deltas: 100% (134/134), done.
111 49 Etienne Massip
$ cd donebox.git
112 10 Thomas Lecavelier
</pre>
113 29 Burt Culver
114 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.
115
116
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:
117
* Revision
118
* Age
119
* Author
120
* Comment
121 25 Benoit Bénézech
122 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.
123
124
To have your repository (and all your branches) refresh every 10 minutes you can add a cronjob like:
125
<pre>
126
*/10 * * * * cd /srv/repos/git/myrepo.git && git fetch origin +refs/heads/*:refs/heads/* && git reset --soft
127
</pre>
128
129
Or you can use a post-receive hook, like this one : 
130 31 Stephen McGinty
131 1 Jean-Philippe Lang
<pre>
132 25 Benoit Bénézech
echo "Post receive-hook => updating Redmine repository"
133 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`'
134 29 Burt Culver
</pre>
135
136 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.
137 22 Babar O'Cap
138
If you are using github, you can use the [[Plugin_List#Github-Hook-plugin|Github Hook Plugin]]
139
140
h4. Bare repository on Windows
141
142
If your bare repository is install on *Windows*, adding :
143 33 Beau Simensen
<pre>;%GIT_PATH%\cmd;%GIT_PATH%\bin;</pre> to your %%PATH%% environment variable.
144
Where %%GIT_PATH%% is the install directory of Git (eg: _C:/Git_)
145
146
h4. Setting up a mirror repository (shortcut, tracking branches)
147
148
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.
149
150
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.
151
152
<pre>
153
$ pwd
154
/var/redmine/git_repositories
155
$ git clone --mirror git://github.com/ook/donebox.git donebox.git
156
Initialized empty Git repository in /var/redmine/git_repositories/donebox.git/
157
remote: Counting objects: 717, done.
158
remote: Compressing objects: 100% (561/561), done.
159
remote: Total 717 (delta 320), reused 371 (delta 134)
160
Receiving objects: 100% (717/717), 211.35 KiB | 86 KiB/s, done.
161
Resolving deltas: 100% (320/320), done.
162
$ cd donebox.git
163
$ git branch
164
  WW
165
  asap
166
  bugcat
167
  comeback
168
* master
169
</pre>
170
171 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.
172
173 23 Yannick Warnier
h3. Mercurial repository
174
175 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.
176
177 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.
178 47 Simen Endsjø
179
Redmine does not synchronize (push/pull) external repositories, but you can set up a script to do this before fetching updates. 
180
hgsync.sh:
181
<pre>
182
#!/bin/bash
183
for file in /var/www/sources.example.com/*; do
184
   if [ -d $file ]; then
185
      cd $file; hg pull -u
186
   fi
187
done
188
</pre>
189 26 David Muir
190
h3. Bazaar repository
191
192
Put in the full path to your repository in "Root directory"
193
i.e. /home/username/bzr/repo/trunk
194
195
196
You'll need to make sure that bzr and bzrlib can be found in ENV['PATH'] and ENV['PYTHONPATH'] respectively.
197
ie. edit config/environment.rb and add:
198
199
<pre>
200 19 Mischa The Evil
ENV['PYTHONPATH'] = '/path/to/pythonlib'
201 1 Jean-Philippe Lang
ENV['PATH'] = "#{ENV['PATH']}:/path/to/bzr/bin"
202 21 Mischa The Evil
</pre>
203 32 Mischa The Evil
204 21 Mischa The Evil
h3. Darcs repository
205
206 19 Mischa The Evil
TODO
207 32 Mischa The Evil
208 1 Jean-Philippe Lang
h2. Repository user-mapping
209
210 41 alan blount
In the project -> settings -> repository there is a link called users (on the lower right). 
211
212
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. 
213
214
This is required for time tracking to work.