Git: Difference between revisions

 
(7 intermediate revisions by the same user not shown)
Line 14: Line 14:
sudo add-apt-repository ppa:git-core/ppa
sudo add-apt-repository ppa:git-core/ppa
sudo apt update
sudo apt update
sudo apt install git-all
sudo apt install git git-lfs
</syntaxhighlight>
</syntaxhighlight>


Line 43: Line 43:


==Branches==
==Branches==
You should make branches per-feature. 
Branches allow you to work on the repository without creating new forks and using more disk space.
This allows you to work on your feature from a static copy of the code repo.   
You can use them to create and test changes from a static copy of the code repo.   
You can also discard this branch if you decide the feature is no longer needed.   
You can also discard a branch if you decide the feature is no longer needed.   
Once the feature has been fully developed, you should rebase the branch onto the head of master.   
Once the feature has been fully developed, you should rebase the branch onto the head of the main branch.   
Then you can merge the branch to add the feature to master.
Then you can merge the branch to add the feature to main/master.


<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
Line 111: Line 111:
</syntaxhighlight>
</syntaxhighlight>


==<code>.gitignore</code>==
==Special Files==
===<code>.gitignore</code>===
<code>.gitignore</code> is used to ignore certain files to make sure they do not get accidentally pushed to the remote git repo.<br>
<code>.gitignore</code> is used to ignore certain files to make sure they do not get accidentally pushed to the remote git repo.<br>
You can find a collection of .gitignore files on [https://github.com/github/gitignore Github's gitignore repo].<br>
You can find a collection of .gitignore files on [https://github.com/github/gitignore Github's gitignore repo].<br>
Or you can create a custom .gitignore file at [https://www.gitignore.io gitignore.io].
Or you can create a custom .gitignore file at [https://www.gitignore.io gitignore.io].


==<code>.gitattributes</code>==
===<code>.gitattributes</code>===
<code>.gitattributes</code> are used to give attributes to paths.<br>
<code>.gitattributes</code> are used to give attributes to paths.<br>
They can be used to assign programming languages to filenames.<br>
They can be used to assign programming languages to filenames.<br>
Line 133: Line 134:
==Git Large File Storage (LFS)==
==Git Large File Storage (LFS)==
[https://github.com/git-lfs/git-lfs/wiki/Tutorial Reference]
[https://github.com/git-lfs/git-lfs/wiki/Tutorial Reference]
* Note that Github charges for LFS so it's best to keep binary files outside of GitHub.
==Sparse checkout==
If you're interacting with a monorepo like [https://github.com/google-research/google-research google-research/google-research], you may be interested in git sparse checkout.<br>
See [https://git-scm.com/docs/git-sparse-checkout Git - git-sparse-checkout Documentation] and [https://github.blog/2020-01-17-bring-your-monorepo-down-to-size-with-sparse-checkout/ Bring your monorepo down to size with sparse-checkout | The GitHub Blog].<br>
This is a relatively new feature so be sure to use an updated version of git.
<syntaxhighlight lang="bash">
git clone --no-checkout $url
cd $project
git sparse-checkout init
git sparse-checkout add $folder
</syntaxhighlight>