- Global setting
- Buat git repo dan R pakej
- Kopi branch di github ke lokal
- Kopi branch tertentu cara lain
- Log commit
- Tidak dapat kesan email
- Buat kekunci SSH dan daftarkan di Github
- Pelbagai akaun
- Permission denied
- ssh-agent refused operation
- Buat Repo melalui terminal
- Padam branch
- Git Aliases
- Undo atau Revert
- Sekiranya ada konflik
- Release atau tag
- Buat gh-page
- git config
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
- Buat repo di Github cth. foo
- Buat R pakej di direktori yang diinginkan
setwd("/path/for/package")
devtools::create("foo")
- Masuk ke direktori foo
- Hantar semua fail-fail didalam direktori foo ke Github
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:
- Pilihan 1:
Diambil dari StackOverflow. Daftarkan semula
git remote set-url origin git@work:GitHubUserName/YouRepoName.git
- Pilihan 2:
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
- Pilihan 3:
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