Created
May 10, 2016 19:45
-
-
Save ryantang/52710a9f557956557211aac9ee90418b to your computer and use it in GitHub Desktop.
how to convert your repo to git-lfs and rewrite history
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
1. When trying to migrate a repo to Github | |
``` | |
git clone --bare ssh://[email protected]:2222/project-name/repo-name.git #clone a bare repo locally | |
curl --header "Authorization: token <GITHUB API TOKEN>" --data '{"name": "repo-name", "description": "Migrated from project-name from gitserver.example.com" https://api.github.com/orgs/org-name/repos #create github repo | |
git push --mirror [email protected]:org-name/repo-name.git | |
``` | |
you'll see an error like this: | |
``` | |
remote: error: File /test/assets/some_dataset.dat is 128.00 MB; ; this exceeds GitHub's file size limit of 100 MB | |
remote: error: File /setup/large_binary.tar.gz is 251.00 MB; this exceeds GitHub's file size limit of 100 MB | |
``` | |
2. Convert the repository to a git-lfs repository. **This rewrites history, so be careful**. One way to do this is to use `git filter-branch`. I found two other tools that make it a lot easier [BFG Repo-Cleaner](https://rtyley.github.io/bfg-repo-cleaner/) and [git-lfs-java](https://github.com/bozaro/git-lfs-java). This write-up uses BFG. | |
a. Make a copy of your repository, locally (`cp -r repo-name.git repo-name-orig.git`) | |
b. Download bfg jar file | |
c. Run the bfg command to convert your repository | |
```bash | |
cd repo-name.git | |
java -jar ../../bfg-1.12.12.jar --convert-to-git-lfs '*{some_dataset.dat,large_binary.tar.gz},' --no-blob-protection | |
``` | |
d. You should notice that your commit SHA changed and you have files in your `lfs/objects` directory. | |
e. Clean your repo, BFG instructs: `git reflog expire --expire=now --all && git gc --prune=now --aggressive` | |
3. Initialize git-lfs in your repository `git lfs install` | |
4. Work around the (git-lfs bug for unnamed remote urls)[https://github.com/github/git-lfs/issues/1069]: `git remote set-url --push [email protected]:org-name/repo-name.git`. Check the result with `git remote -v` | |
5. Git push `git push --mirror origin | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
It was helpful