Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The repository is too big #119

Closed
chrisgorgo opened this issue Aug 27, 2018 · 17 comments
Closed

The repository is too big #119

chrisgorgo opened this issue Aug 27, 2018 · 17 comments
Assignees

Comments

@chrisgorgo
Copy link
Contributor

remote: warning: GH001: Large files detected. You may want to try Git Large File Storage - https://git-lfs.github.com.
remote: warning: See http://git.io/iEPt8g for more information.
remote: warning: File ds000246/sub-emptyroom/meg/sub-emptyroom_task-noise_run-01_meg.ds/sub-emptyroom_task-noise_run-01_meg.meg4 is 82.67 MB; this is larger than GitHub's recommended maximum file size of 50.00 MB

We should zero the large MEG files and purge the history.

@sappelhoff
Copy link
Member

Perhaps using something like this? --> https://rtyley.github.io/bfg-repo-cleaner/

While searching the .git directory using the method below (stackoverflow), I also found a couple of other large files that might need to be purged.

git rev-list --objects --all \
| git cat-file --batch-check='%(objecttype) %(objectname) %(objectsize) %(rest)' \
| awk '/^blob/ {print substr($0,6)}' \
| sort --numeric-sort --key=2 \
| cut --complement --characters=13-40 \
| numfmt --field=2 --to=iec-i --suffix=B --padding=7 --round=nearest

This output is provided by adding | tail -n 20 to the code above:

5c467907f207  3,1MiB ds000246/sub-0001/meg/sub-0001_task-AEF_run-02_meg.ds/sub-0001_task-AEF_run-02_meg.res4
477443f9f473  7,4MiB ieeg_visual/sub-01/ses-01/anat/sub-01_ses-01_T1w_pial.R.surf.gii
5eb83321187d   15MiB ds000117/derivatives/mriqc/reports/sub-11_ses-mri_acq-mprage_T1w.html
0fd32b82227a   15MiB ds000117/derivatives/mriqc/reports/sub-08_ses-mri_acq-mprage_T1w.html
ff7a25de846a   15MiB ds000117/derivatives/mriqc/reports/sub-14_ses-mri_acq-mprage_T1w.html
cc896c93e5b5   16MiB ds000117/derivatives/mriqc/reports/sub-12_ses-mri_acq-mprage_T1w.html
12be3e03924f   16MiB ds000117/derivatives/mriqc/reports/sub-07_ses-mri_acq-mprage_T1w.html
08aeb541f638   16MiB ds000117/derivatives/mriqc/reports/sub-13_ses-mri_acq-mprage_T1w.html
f3dffd12c007   16MiB ds000117/derivatives/mriqc/reports/sub-15_ses-mri_acq-mprage_T1w.html
42cbfd14be3c   16MiB ds000117/derivatives/mriqc/reports/sub-09_ses-mri_acq-mprage_T1w.html
12a27e26f2fe   16MiB ds000117/derivatives/mriqc/reports/sub-03_ses-mri_acq-mprage_T1w.html
448553a5b8ee   16MiB ds000117/derivatives/mriqc/reports/sub-10_ses-mri_acq-mprage_T1w.html
765f03490b18   17MiB ds000117/derivatives/mriqc/reports/sub-05_ses-mri_acq-mprage_T1w.html
aeb918749ffa   17MiB ds000117/derivatives/mriqc/reports/sub-02_ses-mri_acq-mprage_T1w.html
81916e6f48bd   17MiB ds000117/derivatives/mriqc/reports/sub-04_ses-mri_acq-mprage_T1w.html
aed7fb66215c   18MiB ds000117/derivatives/mriqc/reports/sub-06_ses-mri_acq-mprage_T1w.html
4ff87f522bb5   18MiB ds000117/derivatives/mriqc/reports/sub-01_ses-mri_acq-mprage_T1w.html
203ec7f85d65   19MiB ds000117/derivatives/mriqc/reports/sub-16_ses-mri_acq-mprage_T1w.html
015f6c374986   49MiB ieeg_visual/stimuli/sub-01_ses-01_task-visual_run-01_stimuli.mat
00495968804c   83MiB ds000246/sub-emptyroom/meg/sub-emptyroom_task-noise_run-01_meg.ds/sub-emptyroom_task-noise_run-01_meg.meg4

@sappelhoff
Copy link
Member

We can also take this opportunity and delete some stale branches:
image

I am talking about the lower 4 in the dropdown menu of the image. Any good reason not to clean that up? What exactly are those chrisfilo-patch* branches @chrisfilo ? Also to be cleaned?

@sappelhoff
Copy link
Member

sappelhoff commented Nov 10, 2018

I think the purging of the history should be done after the iEEG and EEG branches are merged. This will simplify this whole procedure.

  • BEP006 merged
  • BEP010 merged

@sappelhoff
Copy link
Member

Quick summary:

In the past, we accidentally pushed huge files to the repository. They were purged in #124 ... but they are still in the git history.

Problem

The repository is ~10 times as big as it should be (570MB) ... so it's slow for cloning

I see the following solutions:

  • no solution: We keep the repository as big as it is; and accept that we did some mistakes (and prevent them in the future, see e.g., Use Travis to block PRs with large files #157 )
    • probably wouldn't be so bad, because I can't imagine a case where one would need the history of the bids-examples ... so users could simply do git clone --depth 1, and the cloning will be fast
  • Completely drop the history and pretend like we are starting fresh
    • no idea what would happen to prior releases etc.
  • Use the BFG repo cleaner
    • involves re-writing history and deleting the history of some data
    • I am not sure how this will behave with releases and tags
    • It'd have to be done by a direct push to upstream push upstream master, and not a PR
    • afterwards we would have to forbid such "direct pushes to master" to prevent the case that a maintainer with outdated history accidentally pollutes our cleaned history again

This is a big question, so we definitely need input from several people on this.

@effigies @yarikoptic @tyarkoni @robertoostenveld @choldgraf @dorahermes

@choldgraf
Copy link
Collaborator

I'm a fan of options 2 and 3 - I think having a repository this large makes it prohibitive for most people to download unless they're really motivated to do so...

@tyarkoni
Copy link

tyarkoni commented May 8, 2019

Agree with @choldgraf. (2) is pretty extreme though. I guess we could start with (3) and fall back on (2) if things go awry or it turns out to be more difficult than anticipated.

@effigies
Copy link
Contributor

effigies commented May 8, 2019

(3) sounds good. There are only two PRs to rebase onto the new history, so helping people (one of them being me...) do that will not be a huge burden.

@yarikoptic
Copy link
Contributor

yarikoptic commented May 8, 2019

I wondered (since never used it myself) if "git graft" mechanism could be used in addition to 3 to mark some commit(s) in the past of the old "heavy" history to match corresponding ones in the "new light" history. That should (theoretically, if my understanding is correct) to allow people to proceed with their existing clones/histories as "nothing has happened" while new objects from the new history would come to replace old(er) ones, and new clones would be lightweight. Also not sure how tags would behave etc.
There exists an open issue in BFG on that: rtyley/bfg-repo-cleaner#82

BUT given the nature/purpose of bids-examples, I think that pure "3" would be just fine ;)

@robertoostenveld
Copy link
Collaborator

I also prefer 3.

If "git graft" does not work, it would be nice (but not required) to give instructions for others how to resolve/clean their clones. The easy solution that I would probably take is to delete my fork and all local clones and make a new one. Instructing the 54 people that now have a fork on github (see members) would already help a lot.

@sappelhoff
Copy link
Member

Alright, I'll then attempt number 3 (BFG repo cleaner) in the next days.

I already put a branch protection for master in place, so nobody will be able to accidentally pollute the history by pushing to it.

In addition, I agree with @robertoostenveld that it might be a good idea to notify all people who have forked the repository.

Let's see how this goes!

@sappelhoff
Copy link
Member

sappelhoff commented May 12, 2019

Progress so far:

  1. git clone https://github.com/bids-standard/bids-examples.git as the backup
  2. git clone --mirror https://github.com/bids-standard/bids-examples.git as the version to be pruned
  3. java -jar bfg-1.13.0.jar --strip-blobs-bigger-than 1M bids-examples.git bfg as downloaded from https://rtyley.github.io/bfg-repo-cleaner/
  4. cd bids-examples.git
  5. git reflog expire --expire=now --all && git gc --prune=now --aggressive
  6. git push

so far so good, the .git directories are

  • 74.4MB for the pruned version
  • versus 564.1MB for the old version

However ...

the push gave some errors, click on details:


Counting objects: 7439, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3200/3200), done.
Writing objects: 100% (7439/7439), 55.21 MiB | 684.00 KiB/s, done.
Total 7439 (delta 3293), reused 7272 (delta 3163)
remote: Resolving deltas: 100% (3293/3293), completed with 71 local objects.
remote: error: GH006: Protected branch update failed for refs/heads/master.
remote: error: Cannot force-push to a protected branch
To https://github.com/bids-standard/bids-examples.git
 ! [remote rejected]   master -> master (protected branch hook declined)
 ! [remote rejected]   refs/pull/10/head -> refs/pull/10/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/10/merge -> refs/pull/10/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/101/head -> refs/pull/101/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/103/head -> refs/pull/103/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/104/head -> refs/pull/104/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/105/head -> refs/pull/105/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/105/merge -> refs/pull/105/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/107/head -> refs/pull/107/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/107/merge -> refs/pull/107/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/108/head -> refs/pull/108/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/108/merge -> refs/pull/108/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/109/head -> refs/pull/109/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/109/merge -> refs/pull/109/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/11/head -> refs/pull/11/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/110/head -> refs/pull/110/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/112/head -> refs/pull/112/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/113/head -> refs/pull/113/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/114/head -> refs/pull/114/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/116/head -> refs/pull/116/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/117/head -> refs/pull/117/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/118/head -> refs/pull/118/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/12/head -> refs/pull/12/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/120/head -> refs/pull/120/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/122/head -> refs/pull/122/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/123/head -> refs/pull/123/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/124/head -> refs/pull/124/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/125/head -> refs/pull/125/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/126/head -> refs/pull/126/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/13/head -> refs/pull/13/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/13/merge -> refs/pull/13/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/130/head -> refs/pull/130/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/130/merge -> refs/pull/130/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/133/head -> refs/pull/133/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/134/head -> refs/pull/134/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/135/head -> refs/pull/135/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/136/head -> refs/pull/136/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/137/head -> refs/pull/137/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/138/head -> refs/pull/138/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/139/head -> refs/pull/139/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/140/head -> refs/pull/140/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/141/head -> refs/pull/141/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/142/head -> refs/pull/142/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/143/head -> refs/pull/143/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/144/head -> refs/pull/144/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/145/head -> refs/pull/145/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/146/head -> refs/pull/146/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/147/head -> refs/pull/147/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/148/head -> refs/pull/148/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/149/head -> refs/pull/149/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/15/head -> refs/pull/15/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/151/head -> refs/pull/151/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/152/head -> refs/pull/152/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/153/head -> refs/pull/153/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/155/head -> refs/pull/155/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/157/head -> refs/pull/157/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/159/head -> refs/pull/159/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/17/head -> refs/pull/17/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/18/head -> refs/pull/18/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/20/head -> refs/pull/20/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/21/head -> refs/pull/21/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/21/merge -> refs/pull/21/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/22/head -> refs/pull/22/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/23/head -> refs/pull/23/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/24/head -> refs/pull/24/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/27/head -> refs/pull/27/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/28/head -> refs/pull/28/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/3/head -> refs/pull/3/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/30/head -> refs/pull/30/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/30/merge -> refs/pull/30/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/33/head -> refs/pull/33/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/34/head -> refs/pull/34/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/35/head -> refs/pull/35/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/36/head -> refs/pull/36/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/4/head -> refs/pull/4/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/41/head -> refs/pull/41/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/41/merge -> refs/pull/41/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/42/head -> refs/pull/42/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/43/head -> refs/pull/43/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/45/head -> refs/pull/45/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/47/head -> refs/pull/47/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/48/head -> refs/pull/48/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/49/head -> refs/pull/49/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/49/merge -> refs/pull/49/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/50/head -> refs/pull/50/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/50/merge -> refs/pull/50/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/51/head -> refs/pull/51/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/55/head -> refs/pull/55/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/58/head -> refs/pull/58/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/59/head -> refs/pull/59/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/6/head -> refs/pull/6/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/60/head -> refs/pull/60/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/61/head -> refs/pull/61/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/62/head -> refs/pull/62/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/62/merge -> refs/pull/62/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/63/head -> refs/pull/63/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/64/head -> refs/pull/64/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/64/merge -> refs/pull/64/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/65/head -> refs/pull/65/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/65/merge -> refs/pull/65/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/66/head -> refs/pull/66/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/66/merge -> refs/pull/66/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/67/head -> refs/pull/67/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/68/head -> refs/pull/68/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/69/head -> refs/pull/69/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/70/head -> refs/pull/70/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/73/head -> refs/pull/73/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/75/head -> refs/pull/75/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/76/head -> refs/pull/76/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/77/head -> refs/pull/77/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/78/head -> refs/pull/78/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/79/head -> refs/pull/79/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/80/head -> refs/pull/80/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/82/head -> refs/pull/82/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/82/merge -> refs/pull/82/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/83/head -> refs/pull/83/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/83/merge -> refs/pull/83/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/84/head -> refs/pull/84/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/85/head -> refs/pull/85/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/86/head -> refs/pull/86/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/87/head -> refs/pull/87/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/87/merge -> refs/pull/87/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/88/head -> refs/pull/88/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/88/merge -> refs/pull/88/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/89/head -> refs/pull/89/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/89/merge -> refs/pull/89/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/9/head -> refs/pull/9/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/9/merge -> refs/pull/9/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/90/head -> refs/pull/90/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/91/head -> refs/pull/91/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/91/merge -> refs/pull/91/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/92/head -> refs/pull/92/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/93/head -> refs/pull/93/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/93/merge -> refs/pull/93/merge (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/94/head -> refs/pull/94/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/95/head -> refs/pull/95/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/96/head -> refs/pull/96/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/97/head -> refs/pull/97/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/98/head -> refs/pull/98/head (deny updating a hidden ref)
 ! [remote rejected]   refs/pull/99/head -> refs/pull/99/head (deny updating a hidden ref)
error: failed to push some refs to 'https://github.com/bids-standard/bids-examples.git'

... apparently, this is a known problem, see e.g., this SO post, and this issue on BFG: rtyley/bfg-repo-cleaner#36

The problem is that we cannot clean the history that was introduced to our repo via other remotes (PRs)

I see three solutions:

  1. solution from above: completely eradicate git history and start afresh (new repo, deleting the present one, use the same name)
  2. same as solution 1., however push the BFG-cleaned history to it
  3. ask GitHub for help to clean our history

I am in favor of 1. or 2.

Any opinions, hints, comments? :-)

@choldgraf
Copy link
Collaborator

I'm in favor of:

  1. Rename this repository to something like bids-examples-old and keep the history for archival purposes.
  2. Start fresh with a new repository that lives at bids-examples. Create a "what happened to this repository's history?" section that links to the archived version.

Thoughts?

@robertoostenveld
Copy link
Collaborator

robertoostenveld commented May 13, 2019 via email

@effigies
Copy link
Contributor

@choldgraf That sounds reasonable to me.

There was also discussion in #159 about removing some of the example datasets. Does it make sense to do that during the move, too?

@choldgraf
Copy link
Collaborator

@effigies my 2 cents: while I'm a fan of removing some example datasets, I'd decouple that action from the action of cleaning up history and reducing the size of the repo...it's hard enough making decisions in a distributed fashion :-)

@sappelhoff
Copy link
Member

sappelhoff commented May 18, 2019

Update

TL;DR: BFG worked, repo is now small, history rewritten, everybody delete their forks/clones and make fresh ones

Although I initially liked the suggestion of making a new repo, I got worried because I remembered that this might have some consequences for the bids-validator, which makes use of the releases in this repository.

As a result, I desperately looked at my process again to find issues ... and there you go 🤦‍♂️

In #119 (comment), it did not work, because the branch protection was set to "on" and the settings didn't allow anyone to push.

On the good side: I disabled branch protection and then the cleaning worked very well. Our git history is ~80MB, and the repository with all files ~130MB --> feel free to check by making a fresh clone: git clone https://github.com/bids-standard/bids-validator

Another good thing: Our tags and releases are not affected.

The only issue that remains is that the GitHub references of all PRs that ever happened to this repository are still intact (albeit now pointing to a re-written history). The only way to solve it is by contacting GitHub support, asking them to delete those refs ... but I don't see a reason to do that, because we don't have sensitive data in these refs. As long as we don't reopen and merge these old PRs, everything will be fine.

On that note: everybody needs to delete their old forks and clones ... and we need to be extra diligent with merging PRs, always making sure that they are based on our new history.

@sappelhoff
Copy link
Member

PS: Next up, I'll make a new release of the bids-examples, which will include the EEG and iEEG data

Feel free to comment if you have concerns, see: #158

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

7 participants