Sign in Join
Wiki copytemporary

Git Conversion Lazarus: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
11This page has the detailed steps used to convert the Lazarus SVN repro to git.
22
33# SubGIT
44
55The initial conversion will be done using TMate Subgit.
66
77## Install
88
99Unpack subgit to
1010
1111`   ~/subgit/subgit-3.3.11`
1212
1313## Required
1414
1515An author.txt file
1616
1717` svn-name - git-name <email>`
1818
1919## Run / main repro
2020
2121`   cd ~/subgit/subgit-3.3.11`\
2222`   ./bin/subgit configure `[`https://svn.freepascal.org/svn/lazarus`](https://svn.freepascal.org/svn/lazarus)` laz.git`\
2323`   `\
2424`   gedit laz.git/subgit/config `
2525
2626And add the following (the first line, replaces an existing setting)
2727
2828`   [svn]`\
2929`     trunk = trunk:refs/heads/main`\
3030`     gitCommitMessage = %message\\n\\ngit-svn-id: %branch@%revision -\\n`\
3131`     `\
3232`   [translate]  `\
3333`     eols = false`\
3434`     otherProperties = false`\
3535`     ignores = false`
3636
3737The translate options prevent .gitignore and .gitattributes. Those can be translated, but will later be replaced...
3838
3939`   cp authors.txt laz.git/subgit/authors.txt`
4040
4141`   ./bin/subgit install laz.git`
4242
4343Without skipping the gitignore/gitattributes, there will be an error at revision 47330. The process will hang. nterrupt it and edit
4444
4545`   gedit lazarus.git/svn/.metadata`
4646
4747and set branches-maxRev and tags-maxRev to 47332 (it should be at 47330) <https://stackoverflow.com/questions/18918215/skip-revisions-when-installing-subgit-repository> Continue with
4848
4949`   ./bin/subgit install laz-bin.git`
5050
5151Stop the daemon
5252
5353`   ./bin/subgit shutdown laz-bin.git/`
5454
5555## Run / binaries repro
5656
5757`   ./bin/subgit configure `[`https://svn.freepascal.org/svn/lazarus`](https://svn.freepascal.org/svn/lazarus)`  laz-bin.git`
5858
5959`   gedit laz-bin.git/subgit/config `\
6060`     [svn]`\
6161`     gitCommitMessage = %message\\n\\ngit-svn-id: %branch@%revision -\\n`\
6262`     trunk = binaries:refs/heads/main`
6363
6464`     cp authors.txt laz-bin.git/subgit/authors.txt`
6565
6666follow the steps above
6767
6868## Run / website repro
6969
7070`   ./bin/subgit configure `[`https://svn.freepascal.org/svn/lazaruswebsite`](https://svn.freepascal.org/svn/lazaruswebsite)` laz-web.git`
7171
7272`   gedit laz-web.git/subgit/config `\
7373`     [svn]`\
7474`     gitCommitMessage = %message\\n\\ngit-svn-id: %branch@%revision -\\n`\
7575`     trunk = trunk:refs/heads/main`
7676
7777`     cp authors.txt laz-web.git/subgit/authors.txt`
7878
7979follow the steps above
8080
8181# Part 2
8282
8383- Updating gitignore
8484- Prefixing all issue references with \#
8585- translating svn revisions to git hashes
8686
8787## Set a git user
8888
8989`   git config --local user.email "lazarus@lazarus-ide.org"`\
9090`   git config --local user.name "lazarus"`
9191
9292## Clean out left overs from subgit
9393
9494`   git for-each-ref --format="%(refname)" refs/svn/ | xargs -n 1 git update-ref -d`
9595
9696## Clean left overs from binaries
9797
9898There are a few tags, that lead to binaries (gdb.exe) ending up in the data
9999
100100`  git tag -d binaries_0_9_26`\
101101`  git tag -d binaries_0_9_26_2`\
102102`  git tag -d binaries_0_9_28`\
103103`  git tag -d binaries_0_9_30`\
104104`  git tag -d binaries_0_9_30_2`\
105105`  git tag -d binaries_0_9_30_2RC1`\
106106`  git tag -d binaries_1_0`
107107
108108## Updating gitignore/gitattributes / Prefix issues with \#
109109
110110The below combines the 2 steps. It can be run in 2 separate calls.
111111
112112It will run for about one hour.
113113
114-<s>
115-
116114`   FILTER_BRANCH_SQUELCH_WARNING=1 git filter-branch --index-filter '  cp ~/subgit/subgit-3.3.11/.gitignore  ~/subgit/subgit-3.3.11/.gitattributes . ; git add .gitignore .gitattributes '  --msg-filter ' perl -ne "while (s/((?:iss?ues?|[ (](?:bugs?|mantis|fix|fixes|patch)\b)(?: +id)?[ :]+(?:#?0*[1-9][0-9]{2,4}(?: *(?:[ ,]| and ) *))*)(0*[1-9][0-9]{2,4})\b/\1#\2/i) {}; print" ' -f  -- --all`
117-
118-</s>
119115
120116`   FILTER_BRANCH_SQUELCH_WARNING=1 git filter-branch  --msg-filter ' perl -ne "while (s/((?:iss?ues?|[ (](?:bugs?|mantis|fix|fixes|patch)\b)(?: +id)?[ :]+(?:#?0*[1-9][0-9]{2,4}(?: *(?:[ ,]| and ) *))*)(0*[1-9][0-9]{2,4})\b/\1#\2/i) {}; print" ' -f  -- --all`
121117
122118Cleanup
123119
124120`   git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d`\
125121`   git reflog expire --expire=now --all ;git gc --prune=now`
126122
127123## Translating references to svn rev (r12345) to \#hash
128124
129125This must be the very last filter-branch. As each filter-branch creates new hashes for the commits, and that would invalidate the hash refs created here.
130126
131127- The first batch will update only commits it branch main.
132128
133129
134130This will also only be references to other commits in main.
135131
136132Merges from branches to main can not be updated.
137133
138134- The 2nd batch will update only commits in branches. This means the hashes for the main branch will be left intact.
139135
140136
141137This will update merges from main to fixes
142138
143139To verify the 2nd batch does not update the main branch compare the hash for **git log -n1 main**. It should not be changed by the 2nd batch.
144140
145141`   rm -rf /tmp/rmap`\
146142`   mkdir /tmp/rmap`\
147143`   git rev-list  main | xargs -L1 /bin/sh -c 'a=$( git log -n1 --pretty='%B' $0 | grep "git-svn-id: .*@[0-9][0-9]* "  | sed "s/.*@`$`[0-9]*`$` .*/\1/" ) ; echo $0 > /tmp/rmap/$a'`\
148144`   git rev-list  main | xargs -L1 /bin/sh -c 'echo 1 > /tmp/rmap/m_$0'`
149145
150146`   FILTER_BRANCH_SQUELCH_WARNING=1 git filter-branch --msg-filter 'perl -wne "use strict; `\
151147`   unless ( -e qq#/tmp/rmap/m_\$ENV{GIT_COMMIT}# ) { print;  next; }`\
152148`   my %f;  foreach(/(?:(?:commit|rev|revisions?|revision`$`s`$`|revert|reverted) +| r)([1-9][0-9]{3,4}\b(?:[\/,-] *[1-9][0-9]{3,4}\b)*)\b/gi) {`\
153149`     my \$rvl=\$1;    `\
154150`     foreach my \$a (split / *[\/,] */, \$rvl) {`\
155151`     unless (\$f{\$a}){`\
156152`       \$f{\$a}=q/#/;`\
157153`       my(\$a1, \$a2) = split / *- */, \$a;`\
158154`       my \$c; my \$rh; if( open \$rh, q/</, qq#/tmp/rmap/\$a1#) { \$c=<\$rh>;   chomp \$c; }`\
159155`       my \$h; if(\$c && (open \$h, q/</, qq#../map/\$c#)) {     `\
160156`          \$c=<\$h>;   chomp \$c;  \$c = q/#/.substr \$c, 0,10; `\
161157`         if (\$a2) {`\
162158`           my \$c2; my \$rh2; if( open \$rh2, q/</, qq#/tmp/rmap/\$a1#) { \$c2=<\$rh2>;   chomp \$c2; }`\
163159`           my \$h; if(\$c2 && (open \$h, q/</, qq#../map/\$c2#)) {       \$c2=<\$h>;   chomp \$c2;        `\
164160`           \$c = \$c.q/-#/.substr( \$c2, 0,10); `\
165161`           }`\
166162`           else { \$c = \$c.q/..# / unless \$c eq q/#/;  warn q/MAP2 FAIL /.\$c2 }`\
167163`         }`\
168164`         \$f{\$a}=\$c;`\
169165`       }`\
170166`       else {warn q/MAP1 fail/.\$a;}`\
171167`     }} `\
172168`   }  `\
173169`   foreach my \$k (keys %f) {   my \$v = \$f{\$k};`\
174170`     unless (\$v eq q/#/) {     s/([ r,\/]\${k}\b)/\$1 \$v/g;   }`\
175171`   }   `\
176172`   warn \$_ if keys %f;`\
177173`   print; "`\
178174`   ' -f -- --all`
179175
180176`   git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d`
181177
182178`   rm -rf /tmp/rmap`\
183179`   mkdir /tmp/rmap`\
184180`   git rev-list  --all | xargs -L1 /bin/sh -c 'a=$( git log -n1 --pretty='%B' $0 | grep "git-svn-id: .*@[0-9][0-9]* "  | sed "s/.*@`$`[0-9]*`$` .*/\1/" ) ; echo $0 > /tmp/rmap/$a'`\
185181`   git rev-list  main | xargs -L1 /bin/sh -c 'echo 1 > /tmp/rmap/m_$0'`
186182
187183`   FILTER_BRANCH_SQUELCH_WARNING=1 git filter-branch --msg-filter 'perl -wne "use strict; `\
188184`   if ( -e qq#/tmp/rmap/m_\$ENV{GIT_COMMIT}# ) { print;  next; }`\
189185`   my %f;  foreach(/(?:(?:commit|rev|revisions?|revision`$`s`$`|revert|reverted) +| r)([1-9][0-9]{3,4}\b(?:[\/,-] *[1-9][0-9]{3,4}\b)*)\b/gi) {`\
190186`     my \$rvl=\$1;    `\
191187`     foreach my \$a (split / *[\/,] */, \$rvl) {`\
192188`     unless (\$f{\$a}){`\
193189`       \$f{\$a}=q/#/;`\
194190`       my(\$a1, \$a2) = split / *- */, \$a;`\
195191`       my \$c; my \$rh; if( open \$rh, q/</, qq#/tmp/rmap/\$a1#) { \$c=<\$rh>;   chomp \$c; }`\
196192`       if (\$c) {  unless ( -e qq#/tmp/rmap/m_\$c# ) { `\
197193`          my \$h; if(open \$h, q/</, qq#../map/\$c#) {   \$c=<\$h>;   chomp \$c; }`\
198194`       }}`\
199195`       if(\$c ) {`\
200196`          \$c = q/#/.substr \$c, 0,10; `\
201197`         if (\$a2) {`\
202198`           my \$c2; my \$rh2; if( open \$rh2, q/</, qq#/tmp/rmap/\$a1#) { \$c2=<\$rh2>;   chomp \$c2; }`\
203199`           if (\$c2) { unless ( -e qq#/tmp/rmap/m_\$c2# ) { `\
204200`              my \$h; if(open \$h, q/</, qq#../map/\$c2#) {   \$c2=<\$h>;   chomp \$c2; }`\
205201`           }}`\
206202`           if(\$c2) {   \$c = \$c.q/-#/.substr( \$c2, 0,10);     }`\
207203`           else { \$c = \$c.q/..# / unless \$c eq q/#/;  warn q/MAP2 FAIL /.\$c2 }`\
208204`         }`\
209205`         \$f{\$a}=\$c;`\
210206`       }`\
211207`       else {warn q/MAP1 fail/.\$a;}`\
212208`     }} `\
213209`   }  `\
214210`   foreach my \$k (keys %f) {   my \$v = \$f{\$k};`\
215211`     unless (\$v eq q/#/) {     s/([ r,\/]\${k}\b)/\$1 \$v/g;   }`\
216212`   }   `\
217213`   warn \$_ if keys %f;`\
218214`   print; "`\
219215`   ' -f -- --all`
220216
221217`   git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d`\
222218`   git reflog expire --expire=now --all ;git gc --prune=now`\
223219`   rm -rf /tmp/rmap`
224220
225221## Updating tags
226222
227223This must be done **after** all filter-branches
228224
229225- Annotate all tags.
230226- Create some more tags
231227
232228This needs the git user being set
233229
234230`   git for-each-ref --format="%(refname:short)" refs/tags/ | xargs -L1 /bin/sh -c 'git tag -f -a $0 -m $0 $0 '`
235231
236232`   git rev-list --in-commit-order  --reverse   fixes_2_2..main | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "main-2_3" -m "main to version 2.3" $0'`\
237233`   git rev-list --in-commit-order  --reverse   fixes_2_0..main | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "main-2_1" -m "main to version 2.1" $0'`\
238234`   git rev-list --in-commit-order  --reverse   fixes_1_8..main | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "main-1_9" -m "main to version 1.9" $0'`\
239235`   git rev-list --in-commit-order  --reverse   fixes_1_6..main | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "main-1_7" -m "main to version 1.7" $0'`\
240236`   git rev-list --in-commit-order  --reverse   fixes_1_4..main | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "main-1_5" -m "main to version 1.5" $0'`\
241237`   git rev-list --in-commit-order  --reverse   fixes_1_2..main | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "main-1_3" -m "main to version 1.3" $0'`\
242238`   git rev-list --in-commit-order  --reverse   fixes_1_0..main | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "main-1_1" -m "main to version 1.1" $0'`\
243239`   git rev-list --in-commit-order  --reverse   fixes_0_9_30..main | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "main-0_9_31" -m "main to version 0.9.31" $0'`\
244240`   git rev-list --in-commit-order  --reverse   fixes_0_9_28..main | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "main-0_9_29" -m "main to version 0.9.29" $0'`\
245241`   git rev-list --in-commit-order  --reverse   fixes_0_9_26..main | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "main-0_9_27" -m "main to version 0.9.27" $0'`\
246242`   git rev-list --in-commit-order  --reverse   fixes_0_9_24..main | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "main-0_9_25" -m "main to version 0.9.25" $0'`\
247243`   git rev-list --in-commit-order  --reverse   main | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "main-0_0" -m "main init" $0'`\
248244`   `\
249245`   git rev-list --in-commit-order  --reverse   main..fixes_2_2 | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-fixes-2_2" -m "fixes 2.2 branch" $0'`\
250246`   git rev-list --in-commit-order  --reverse   main..fixes_2_0 | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-fixes-2_0" -m "fixes 2.0 branch" $0'`\
251247`   git rev-list --in-commit-order  --reverse   main..fixes_1_8 | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-fixes-1_8" -m "fixes 1.8 branch" $0'`\
252248`   git rev-list --in-commit-order  --reverse   main..fixes_1_6 | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-fixes-1_6" -m "fixes 1.6 branch" $0'`\
253249`   git rev-list --in-commit-order  --reverse   main..fixes_1_4 | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-fixes-1_4" -m "fixes 1.4 branch" $0'`\
254250`   git rev-list --in-commit-order  --reverse   main..fixes_1_2 | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-fixes-1_2" -m "fixes 1.2 branch" $0'`\
255251`   git rev-list --in-commit-order  --reverse   main..fixes_1_0 | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-fixes-1_0" -m "fixes 1.0 branch" $0'`\
256252`   git rev-list --in-commit-order  --reverse   main..fixes_0_9_30 | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-fixes-0_9_30" -m "fixes 0.9.30 branch" $0'`\
257253`   git rev-list --in-commit-order  --reverse   main..fixes_0_9_28 | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-fixes-0_9_28" -m "fixes 0.9.28 branch" $0'`\
258254`   git rev-list --in-commit-order  --reverse   main..fixes_0_9_26 | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-fixes-0_9_26" -m "fixes 0.9.26 branch" $0'`\
259255`   git rev-list --in-commit-order  --reverse   main..fixes_0_9_24 | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-fixes-0_9_24" -m "fixes 0.9.24 branch" $0'`\
260256`   `\
261257`   git rev-list --in-commit-order  --reverse   main..free-sparta | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-free-sparta" -m "free-sparta branch" $0'`\
262258`   git rev-list --in-commit-order  --reverse   main..gtk-splitup | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-gtk-splitup" -m "gtk-splitup branch" $0'`\
263259`   git rev-list --in-commit-order  --reverse   main..lcl-smartlink | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-lcl-smartlink" -m "lcl-smartlink branch" $0'`\
264260`   git rev-list --in-commit-order  --reverse   main..listviewsortindicator | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-listviewsortindicator" -m "listviewsortindicator branch" $0'`\
265261`   git rev-list --in-commit-order  --reverse   main..macosfullkeyboardaccess | head -n 1 | xargs -L1 /bin/sh -c 'git tag -a "t-macosfullkeyboardaccess" -m "macosfullkeyboardaccess branch" $0'`
266262
267263## Finish
268264
269265edit HEAD to point to main
270266
271267`   gedit HEAD`
272268
273269`   git remote add origin `[`https://gitlab.com/freepascal.org/lazarus-ide/lazarus_test_conversion_X.git`](https://gitlab.com/freepascal.org/lazarus-ide/lazarus_test_conversion_X.git)
274270
275271`   git push --all origin`\
276272`   git push --tags origin`
277273
278274On gitlab
279275
280276- Settings / Repository
281277 - set default gitlab branch\
282278 \- no autoclose issues on default branch // decide later
283279 - set "reject unverified users"
284280 - protect branches * // no force push
285281 - protect tags: fixes* lazarus* release* main* // maintainers only
286282
287283- Settings / Integrations
288284 - External wiki
289285
290286- Settings / General
291287 - Disable Wiki, Snippets, Papges, Requirements, Operations, Service Desk, Container, Packages\
292288 For now also CI, until we use it
293289 - Merge request approvals: Enable "Prevent users from modifying MR approval rules"
294290 - set the avatar
295291 - Add "description"
296292 - Make public
297293 - Disable "Users can request access"
298294
299295# Comparing data before/after filter-branch
300296
301297With subject line / Will show changes in subject
302298
303299`   git log --pretty='format:%ae %an %cd  %s %d' --graph --all > ../log.txt`
304300
305301Without subject line / Should have no diff
306302
307303- This compares the graph and committers =\> Thus it will show if all commits are present, and if all branches are correct
308304
309305`   git log --pretty='format:%ae %an %cd %d' --graph --all > ../log.txt`
310306
311307- compare the changes to files (gitignore / gitattributes will diff for the top commit(s)) / --graph can be added too
312308
313309
314310(slow)
315311
316312`   git log --all --pretty='%ae %an %cd %d' --stat > ../statlog.txt`
317313
318314- Compare the overall amount of lines in the log.
319315
320316`   git log --all | wc -l`
321317
322318Make sure you do that after "clean up" in each step. Otherwise the internal subgit or filter-branch revs will go into the compare.
323319
324320Also "removing the binaries" introduces a diff.
325321
326322# Data
327323
328324Please mail me for any changes. Do not make changes here. Otherwise the changes will not make it into the conversion.
329325
330326## .gitignore
331327
332328`   **/*.o`\
333329`   **/*.ppu`\
334330`   **/*.exe`\
335331`   **/*.bak`\
336332`   **/*.diff`\
337333`   **/*.patch`\
338334`   **/units/`\
339335`   **/lib/`\
340336`   **/*;[1-9]`\
341337`   **/*.~*`\
342338`   **/*.*~`\
343339`   **/*.fpcunit.ini`\
344340`   **/*.lps`\
345341`   **/*.compiled`\
346342`   /docs/chm/**/*.chm`\
347343`   /docs/chm/**/*.xct`\
348344`   /docs/chm/**/*.kwd`\
349345`   /docs/chm/**/*.txt`\
350346`   /libeay32.dll`\
351347`   /ssleay32.dll`\
352348`   /lazarus.cfg`\
353349`   ide/revision.inc`\
354350`   `\
355351`   !**/patches/*.patch`\
356352`   !**/patches/*.diff`
357353
358354## .gitattributes
359355
360356`   * text=auto !eol`\
361357`   **/*.pp text`\
362358`   **/*.pas text`\
363359`   **/*.inc text`\
364360`   **/*.lfm text`\
365361`   **/*.lrs text`\
366362`   **/*.lps text`\
367363`   **/*.lpr text`\
368364`   **/*.lpi text`\
369365`   **/*.lpk text`\
370366`   **/*.lpl text`\
371367`   **/*.lrj text`\
372368`   **/*.dpr text`\
373369`   **/*.dfm text`\
374370`   **/*.pot text`\
375371`   **/*.po text`\
376372`   **/*.rc text`\
377373`   **/*.txt text`\
378374`   **/*.txt.sample text`\
379375`   **/*.ini text`\
380376`   **/*.cfg text`\
381377`   **/*.iss text`\
382378`   **/*.isl text`\
383379`   **/*.xml text`\
384380`   **/*.xsl text`\
385381`   **/*.html text`\
386382`   **/*.css text`\
387383`   **/*.php text`\
388384`   **/*.js text`\
389385`   **/.htaccess text`\
390386`   **/*.patch text`\
391387`   **/*.md text`\
392388`   **/*.bat text`\
393389`   **/*.sh text`\
394390`   **/*.compiled text`\
395391`   **/*.bdsproj text`\
396392`   **/*.plist text`\
397393`   **/*.h text`\
398394`   **/*.c text`\
399395`   **/*.cpp text`\
400396`   **/*.in text`\
401397`   **/*.xpm text`\
402398`   **/*.svg text`\
403399`   **/Makefile text`\
404400`   **/Makefile.compiled text`\
405401`   **/Makefile.fpc text`\
406402`   **/*.exe -text`\
407403`   **/*.dll -text`\
408404`   **/*.so -text`\
409405`   **/*.gif -text`\
410406`   **/*.jpg -text`\
411407`   **/*.ico -text`\
412408`   **/*.bmp -text`\
413409`   **/*.res -text`\
414410`   **/*.ttf -text`\
415411`   **/*.cur -text`\
416412`   **/*.db3 -text`\
417413`   **/*.dbf -text`\
418414`   **/*.mbf -text`\
419415`   **/*.mdx -text`\
420416`   **/*.fbk -text`\
421417`   **/*.odt -text`\
422418`   **/*.ods -text`\
423419`   **/*.odg -text`\
424420`   **/*.odp -text`\
425421`   **/*.xls -text`\
426422`   **/*.pdf -text`\
427423`   **/*.zip -text`\
428424`   **/*.rar -text`\
429425`   **/*.tar -text`\
430426`   **/*.tgz -text`\
431427`   **/*.gz -text`\
432428`   **/*.icns -text`\
433429`   **/*.dcr -text`\
434430`   components/aggpas/**/*.ppm -text`\
435431`   **/*.app/Contents/MacOS/* -text`
436432
437433---
438434*From the Free Pascal wiki, page "Git Conversion Lazarus", as it stood on 2021-07-28 after a change by Martin, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*
439435Category: Version Control

Back to history