Tarikh kemaskini: 2022-11-07

Global setting

Tetapkan email dan nama di global.

git config --global user.email "your@email.com"
git config --global user.name "Your name"

Buat git repo dan R pakej

Langkah-langkah untuk buat R pakej dan kemudiannya menghantar ke Github

setwd("/path/for/package")
devtools::create("foo")
git init
git add .
git commit -m "Mula foo"
git remote add origin git@work:ybkamaleri/foo.git
git push -u origin master

Sila rujuk di GitHub Guides untuk penerangan selajutnya

Kopi branch di github ke lokal

Bila membuat branch dari pc lain dan ingin membuat salinan branch yang sama di pc lain.

git checkout -b [new-branch-lokal] [remote]/[branch-remote]

Contohnya

git checkout -b new_func_pc2 origin/func_pc1

Kopi branch tertentu cara lain

Rujukan Stackoverflow

You need to create a local branch that tracks a remote branch. The following command will create a local branch named daves_branch, tracking the remote branch origin/daves_branch. When you push your changes the remote branch will be updated.

git checkout --track origin/daves_branch

--track is shorthand for git checkout -b [branch] [remotename]/[branch] where [remotename] is origin in this case and [branch] is twice the same, daves_branch in this case.

Log commit

Untuk lihat apa yang sudak di commit

  git log -p -2

git log sudah memadai tetapi dengan pilihan -p akan menunjukkan perbezaan di setiap “commit”. Dan penggunaan -2 untuk menetapkkan hanya menunjukkan DUA kemasukkan yang terbaru

Tidak dapat kesan email

Bila “unable to auto-detect email” tetapkan begini

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

Buat kekunci SSH dan daftarkan di Github

Untuk rujukan boleh dibaca di Github Help.

Sebagai ringkasan, caranya seperti dibawah:

  $ ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Ini akan membuat ssh menggunakan email sebagai label untuk rujukan. Sekiranya guna pelbagai git akaun, boleh tetapkan nama fail bila menetapkkan kekunci (key).

  Enter a file in which to save the key (/home/you/.ssh/id_rsa): /home/you/.ssh/id_sendiri

Untuk daftarkan di Github, perlu login di akaun Github, kemudian kopi public key yang ditetapkan. Penggunaan program xclip memudahkan untuk mengkopi kekunci SSH

  $ sudo apt-get install xclip
  # Downloads and installs xclip. If you don't have `apt-get`, you might need to use another installer (like `yum`)

  $ xclip -sel clip < ~/.ssh/id_rsa.pub
  # Copies the contents of the id_rsa.pub file to your clipboard

Pelbagai akaun

Untuk membuat pelbagai SSH akaun sila rujuk Create mulitple SSH accounts

Contoh untuk buat ssh-key. Tetapkan kekunci utk personal dan kerja seperti dibawah dan biarkan kosong utk passphrase

$ ssh-keygen -t rsa -b 4096 -C "your-email-here"

Enter file in which to save the key (/home/yourusername/.ssh/id_rsa): /home/yourusername/.ssh/id_work
Enter passphrase (empty for no passphrase):
Enter same passphrase again:

Buka id_rsa_work.pub di gedit dan kopi kekunci untuk di masukkan ke Github SSH-key

Kemudian daftarkan ssh-key. OBS! Cara ini tidak dipakai dan hanya terus buat fail config untuk pelbagai akaun. Sekiranya tidak berhasil boleh cuba daftarkan ssh-key cara di bawah.

$ ssh-add -K /path/to/private/key/file

Buat fail config dan tambah di fail .ssh/config seperti dibawah

Host personal
HostName github.com
User git
IdentityFile ~/.ssh/id_personal

Host work
HostName github.com
User git
IdentityFile ~/.ssh/id_work

Untuk memeriksa username yang dipakai

git config user.name

Untuk mengklone pelbagai akaun

git clone git@personal:yusbk/nama_rep.git
git clone git@work:ybkamaleri/nama_rep.git

Untuk menggunakan akaun lain di Github dari yang sedang digunakan

git remote add origin-personal git@personal:yusbk/nama_rep.git
git add nama_fail
git commit -m "maklumat"
git push -u origin-personal master

Permission denied

Sekiranya permission denied bile git push origin untuk repo gunakan user.name berlainan contohnya:

  ERROR: Permission to user.ybk1/repo.git denied to user.ybk2.
  fatal: The remote end hung up unexpectedly

Buang SSH key di Github and daftarkan semula kekunci SSH tersebut ke GitHub account. Contohnya bila username untuk work dinafikan, boleh daftarkan semula begini:

sudo apt install xclip
xclip -sel clip < ~/.ssh/id_work.pub

xclip akan kopikan kekunci SSH di clipboard yang kemudian pulah di paste di Github.

Cara-cara lain yang boleh dicoba

Tukar user.name dengan apa yang sepatutnya… contohnya bila username work diperlukan dan yang sedang dipakai ialah personal maka tukar ke work seperti begini

  ssh-add ~/.ssh/id_rsa_work

Sekiranya tidak berhasil boleh coba cara dibawah:

Diambil dari StackOverflow. Daftarkan semula

git remote set-url origin git@work:GitHubUserName/YouRepoName.git

Periksa fail ~/.ssh/config yang url adalah betul

  [remote "origin"]
      fetch = +refs/heads/*:refs/remotes/origin/*
      url = git@work:nama_github/nama_repo.git

Boleh juga masukkan di “command line” sebegini

  git remote set-url origin git@work:nama_github/nama_repo.git

Masukkan SSH semula di github. Tetapi sebelumnya harus buang ssh di cache dengan ssh-add -D kemudian boleh periksa key yang ada dengan ssh-add -l. Untuk memasukkan key-ssh, bukan fail cth id_rsa_work.pub dan kopi semua dan salin di Add-SSH di github.

ssh-agent refused operation

Ini disebabkan file permission. Tukarkan ke 600

  chmod 600 ~/.ssh/id_rsa_personal
  chmod 600 ~/.ssh/*

Cara kedua itu ialah bila ingin tukarkan permission untuk semua fail-fail di folder .ssh.

Buat Repo melalui terminal

Untuk buat repo kosong di Github sebelum memulakan projek perkongsian. bare harus sentiasa digunakan untuk berkongsi repo

ssh user@host git init --bare /path/to/repo.git

Kemudian semua yang terlibat utk membangunkan repo boleh mengkelon repo tersebut

git clone ssh://user@host/path/to/repo.git

Padam branch

Untuk padamkan lokal branch

git branch -d <nama branch>

Untuk padamkan remote branch

git push origin --delete <nama branch>

Git Aliases

Git aliases yang selalu dipakai

git config --global alias.ci commit
git config --global alias.st status
git config --global alias.co checkout
git config --global alias.br branch

Untuk menetapkkan git sentiasa memakai Emacs sebagai editor

git config --global core.editor emacs

Undo atau Revert

Untuk kembali ke sebelum pertukaran tetapi hanya fail-fail di direktori yang sedang dipakai. Cara pertama hanya menggembalikan unstaged changes

git checkout --l

Untuk menggembalikan pertukaran-pertukaran yang sudah staged dan unstaged

git reset --hard
git reset --hard HEAD

Untuk membuang semua pertukaran-pertukaran lokal kerana ingin mendapatkan versi di GitHub

git reset --hard HEAD
git pull

git reset --hard a123412 #untuk id commit tertentu

Untuk unstange semua fail-fail yang sudah di stage melalui git add

git reset

Untuk menggembalikan fail tertentu atau direktori tertentu

git checkout <nama_dir atau nama_fail>

Sekiranya ada konflik

Untuk menyimpan pertukaran-pertukaran lokal sekiranya ada konflik dengan versi Github

git fetch origin
git status
git pull

#if conflicts then?

git add .
git commit -m "message"
git pull #ini akan bagi error message tapi tidak mengapa

# buka fail yang ada konflik dan betulkan masalah konflik

git add .
git commit -m "fixed conflicts"
git pull

Release atau tag

Cara biasa untuk buat tag dan masukkan maklumat ialah menggunakan -a annotate dan -m message

git tag -a v0.1.2 -m "Version baru 0.1.2"

Bila sudah buat tag boleh lihat gunakan git show v0.1.2 atau git tag. Sekiranya tidak ingin memasukkan sebarang maklumat dan hanya ingin membaharui versi sahaja, boleh guna:

git tag v0.1.2

Sekiranya ingin memasukkan tag di git yang sudah di merge, boleh mendapatkan nombor commit menggunakan log kemudian tag commit tersebut. Contohnya ingin masukkan tag di commit “Contoh penting”.

$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 Contoh penting
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing

Hanya sebahagian sahaja daripada nombor commit yang perlu bila di tag dan dipakai dipenghujung komandonya.

git tag -a v0.1.3 a6b4c9

Untuk dikongsikan di GitHub boleh dibuat seperti biasa dengan push

git push origin v0.1.2

Tetapi sekiranya ada banyak tag boleh pakai git push --tags

Buat gh-page

Pakai option --orphan untuk buat root supaya tidak perlu sync dengan master.

  # create gh-pages branch
  git checkout --orphan gh-pages
  git rm -rf .
  touch README.md
  git add README.md
  git commit -m 'initial gh-pages commit'
  git push origin gh-pages

  # add gh-pages as submodule
  git checkout master
  git submodule add -b gh-pages git@github.com:skratchdot/MYPROJECT.git _site
  git commit -m "added gh-pages as submodule"
  git push origin master
  git submodule init

Here, the intention is to create a branch for github pages, which is typically not associated with the history of your repo (master and other branches) and hence the usage of git checkout --orphan atau git symbolic-ref. This creates a “root branch”, which is one without a previous history.

Why do we need to do all this, instead of just calling git branch gh-pages. Well, if you are at master and you do git branch gh-pages, gh-pages will be based off master.

Note that it is also called an orphan branch and git checkout --orphan will now do the same thing as the git symbolic-ref that was being done before.

Cara lama pakai git symbolic-ref

  cd /path/to/repo-name
  git symbolic-ref HEAD refs/heads/gh-pages
  rm .git/index
  git clean -fdx
  echo "My GitHub Page" > index.html
  git add .
  git commit -a -m "First pages commit"
  git push origin gh-pages

git config

Ada dua jenis config untuk git, iaitu --local dan --global. Fail untuk local ialah project .git folder manakala untuk global di ~/.gitconfig. Contoh isi fail config global ialah:

  [user]
     name = Your Name
     email = your.user@gmail.com

  [diff]
     ignoreSubmodules = dirty
comments powered by Disqus