Git: Difference between revisions

From XPUB & Lens-Based wiki
Line 149: Line 149:


== Recipes ==
== Recipes ==
THIS INFORMATION IS OUT OF DATE ... NEEDS UPDATING TO MATCH gitea install! [[User:Michael Murtaugh|Michael Murtaugh]] ([[User talk:Michael Murtaugh|talk]]) 10:36, 26 June 2019 (CEST)


=== Pusing a folder to git.xpub.nl ===
=== Pusing a folder to git.xpub.nl ===

Revision as of 09:36, 26 June 2019

http://eagain.net/articles/git-for-computer-scientists/

Trees, Branches, and Blobs

git init
git add *
git commit -m 'hello git'


init, clone

git init
git clone git://...

status, add, diff

tracked/untracked "staged"

file status lifecycle, p. 20 gitbok

git status

Add a file called ".gitignore" to ignore "temporary" or other files you don't want to track.

*.[oa]
*~
*.pyc


git diff

Shows changes to unstaged files only

git diff --cached

Show what you've staged so far

commit

git commit -m 'added new quote'
git commit -a -m 'edited links'

Stages every file (that's being tracked) -- ie "auto add"

git commit --amend

Add forgotten changes to last commit.

rm

git rm readme.txt
git rm --cached readme.txt

Remove from the stage, but not the file! (untrack)

git mv

(technically git "sees" these movements already, same as mv, remove, add: but the command is there for convenience)

log

git log
git log -p -2
git log --stat
git log --pretty=oneline
git log --graph

remote

git remote
git remote -v
git add remote remote-name URL

Where remote-name is whatever you want it to be called, and the URL is a remote git URL.

git remote show origin
git fetch remote-name

pull

pull = fetch + merge

push

git push [remote-name] [branch-name]
git push origin master

tags

Show SMW ?!


<!?> Find/link workflow article for git + web

Auto-Completion

contrib/completion/git-completion.bash

Add to .bashrc:

source ~/.git-completion.bash

(or)

cp git-completion.bash /etc/bash_completion.d/

(linux)

cp git-completion.bash /opt/local/etc/bash_completion.d/

(mac)

branch

git checkout -b iss53

create + checkout a branch, short for:

git branch iss53
git checkout iss53
git checkout master
git checkout -b fix
git commit -a -m 'fixed something'
git checkout master
git merge fix
git branch -d fix

"Fast-forward" reflects that the changes were "upstream" of the current working state.


conflict

Generally, you want to commit all your changes before switching branches (checkout)


If we each write to master -- lots of conflicts? Contrast with creating branch for each person ?!

Recipes

THIS INFORMATION IS OUT OF DATE ... NEEDS UPDATING TO MATCH gitea install! Michael Murtaugh (talk) 10:36, 26 June 2019 (CEST)

Pusing a folder to git.xpub.nl

This recipe requires that you know some things such as:

  • USERNAME: your username to ssh to git.xpub.nl. You will also need to know your password or (better) have already copied an ssh key to the server
  • SOMEFOLDER: the folder on your laptop (local computer) that you want to push
  • NAMEOFREPO: the name for the repo on the server... typically the same as the name of the folder but it shouldn't be the same as another repo.

Step 1: SSH to the server and run the bash script "newrepos.sh"

   ssh USERNAME@git.xpub.nl
   cd /var/www/git.xpub.nl
   ./newrepos.sh NAMEOFREPO "Description of my great project"

This spits out a message like:

   ALL GOOD!
   push URL: git.xpub.nl:/var/www/git.xpub.nl/repos/NAMEOFREPO.git

You can logout now.

Step 2: Turn your folder into a git repository

You can skip this step, if your folder is already a git repo.

   cd path/to/SOMEFOLDER
   git init

You may want to make and add a ".gitignore" file to avoid adding files you *don't* want in the repo. And then add things with

   git add myproject.py
   git add subfolder
   ...

And commit them

   git commit -m "First commit"

Step 3: Add the repo as a "remote" to your repo

   cd path/to/SOMEFOLDER
   git remote add pzi USERNAME@git.xpub.nl:/var/www/git.xpub.nl/repos/NAMEOFREPO.git

Note that you should add your USERNAME for ssh'ing to git.xpub.nl

Now finally you can push and "set the upstream" to that remote as the default...

   git push -u pzi master