Git commands
Git repository clone locally.
cp -r SourceDir TargetDir
Push a local repository to Gitlab.UTU
Set up a Project on gitlab.utu.fi
this will bring an instruction page.
cd existing_repo
git remote add origin https://gitlab.utu.fi/remoterepo/coolproject.git
git push -u origin --all
git push -u origin --tags
To change git remote repository mapping:
Go to the local git repo and check the remote repository URL.
cd git.repo
git remote -v
To change the remote repository
git remote set-url origin https://[newURL]
Fix blank diff in Git repositories
Remove the problem of diff being blank on git when file permissions change. Happens when git repos are synced to the cloud.
Go to the git directory/repository and run
git config core.filemode false
Clone a remote repository, but disable Push.
For times when you want to disable push so you accidentally don’t push any changes to the remote repo.
git clone https://gitlab.utu.fi/EloGroup/Project.git
cd Project
git remote -v # Check remote
git remote set-url --push origin Push_Disabled
git remote -v # Check that it says Remote disabled for push
Cleaning up sensitive files or data from Git repository
Clone your git repo as a bare repo using:
git clone --mirror [email protected]:robocopAlpha/pihole_lists.git
Download BFG and run:
# bfg --delete-files id_{dsa,rsa} pihole_lists.git
bfg --delete-files makehosts.R pihole_lists.git
git reflog expire --expire=now --all && git gc --prune=now --aggressive
git push
If push fails with a message like
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to '[email protected]:robocopAlpha/pihole_lists.git'
then go to gitlab.com and -> project settings->protected branches-> click un-protect. Then push using
git push -u -f master
Cloning a remote repository into a separate branch in another repository
Initialiaze a new repository with a readme on github /gitlab / locally.
git clone [email protected]:dotGuard/cereberus.git
cd cereberus
Now we can start cloning the other remote repo to a local branch
git switch master
git remote add fork [email protected]:dotGuard/imac-2013.git
git switch -c iMac2013
git fetch fork
# Optional merge
# git switch master
# git merge --allow-unrelated-histories remotes/fork/master import
Then rebase through some gui like:
Then push the changes upstream to a new branch on origin
and remove remote for fork
:
git push -u origin iMac2013
git remote rm fork
git remote -v
# should only list origin
Swtiching to branches and restoring files:
```git checkout branch``` & ```git checkout filename``` have been changed slightly
# git checkout branch is now:
git swtich branch
# Force switch
git switch -f branch
# create a branch and switch to it
git switch -c branch
# git checkout filename is now:
git restore filename
List files in a git repo (useful for bare repo)
dotGuard ls-tree --full-tree -r HEAD # shows hashes
dotGuard ls-tree --full-tree -r --name-only HEAD
Using git lfs
git lfs
or git large-file-system has been introduced for smart mangement of large objects in git repos.
Here is how to migrate your big files to git lfs
.
Installing and seting up required tools
git-lfs
:# Install brew from https://brew.sh # optional get brewlog from https://github.com/dchakro/brewlog # OR just substitute brewlog for brew in the following commands # update git, as git>=2.2 brewlog upgrade git brewlog install git-lfs git-filter-repo git-lfs install
Use git-lfs to track large files
# example to add by file type git lfs track "*.RDS" git lfs track "*.afphoto" # Add a folder git lfs track "assets/**" git add . # OR use git add <filenames> git push
migrate large files to git-lfs
Install and setup git lfs as above.
Archive the repo (without the .git folder)
tar --exclude=".git" -cf - repo | xz -v -T2 -z - > ~/Desktop/repo_bak.tar.xz
migrate files to git lfs
cd repo git filter-repo --strip-blobs-bigger-than 1M --force # remove the folder called "delete" git filter-repo --invert-paths --path-glob '*/delete' --path delete # restore files from backup tar -xvf ~/Desktop/repo_bak.tar.xz ~/Desktop/. cp ~/Desktop/repo.bak/* . git lfs track "delete/*" git lfs track "*.RDS" git add . gcm 'migrate to git lfs' git remote add origin [email protected]:username/repo.git git push -f origin master # Output should say something like: # Uploading LFS objects: 0% (0/1), 2.2 MB # this following command will show the files tracked by git lfs git lfs ls-files