Perintah dasar bash, git, npm dan benang, serta sedikit tentang package.json dan semver

Selamat siang teman!



Berikut ini adalah contekan singkat untuk perintah bash, git, npm, yarn, package.json, dan semver dasar.



Legenda: [dir-name] - artinya nama direktori, | - berarti "atau".



Saya sarankan memasukkan setiap perintah di terminal dan mempelajari hasilnya dengan hati-hati, sehingga Anda akan segera mengingatnya dan menentukan perintah mana yang Anda perlukan dan mana yang tidak.



Saya mohon maaf atas kemungkinan kesalahan dan kesalahan ketik. Saya akan dengan senang hati memberikan komentar dan saran.



Tanpa kata pengantar lebih lanjut.



Daftar Isi:





pesta



bash adalah alat baris perintah yang memungkinkan Anda melakukan beberapa hal umum.



Instalasi: Dalam kasus saya, bash diinstal bersama dengan git.



Referensi:



help


Sejarah perintah:



history


Pembersihan terminal:



clear


Keluar dari terminal:



exit


Pembuatan direktori:



// make directory
mkdir [dir-name]
// 
mkdir my-app
//  
mkdir -p {dir1,dir2}
//   
mkdir -p my-app/{css,js}


Ubah direktori:



// change directory
cd [dir-name]
// 
cd my-app
//   
cd !$
//  
cd ..
//    
cd ../..
//  
cd -
//  
cd ~


Jalur ke direktori saat ini:



// print work directory
pwd


Daftar file:



// list
ls
//   
ls -a | -f
//  
// ,  
ls -l


Pembuatan file:



touch [file-name]
// 
touch index.html
//  
touch my-app/{index.html,css/style.css,js/script.js}


Isi file:



cat [file-name]
// 
cat index.html
//     
cat [file-name] | sort | uniq
//  
less [file-name] // q - exit
// n    
head -50 [file-name]
// n    
tail -50 [file-name]
//  
grep [string] [file-name]

//     
unzip [achive-name]

//  
file [file-name]


Menyalin, memindahkan dan menghapus file:



// copy
cp [file1] [file2]

// move
mv [file1] [file2]
// 
//        
mv [dir1]/*.* [dir2]

// remove
rm [file-name]
//   
rmdir [dir-name]
//   
rm -r [dir-name]
// 
rm -rf [dir-name]


Output ke terminal jalur:



echo [string]
// 
echo hello
//    
echo hello > greet.txt
//    
echo hello >> greet.txt


Unggah file:



wget [url]


Konektor:



true && echo hello
false || echo hello
echo hello ; ls


Konveyor:



//    - \n
cat [file] | wc -l


git



git adalah sistem kontrol versi terdistribusi yang memungkinkan Anda mengontrol proses pembuatan perubahan pada sebuah proyek.



Buku Pro Git .



Screencast oleh Ilya Kantor .



Mulai Cepat: Git How To .



Instalasi: git-scm.com .



Pemeriksaan instalasi:



git --version


Referensi:



git help
git help [command-name]
git [command-name] --help | -h


Pengaturan minimum:



// --local -    
// --global -    
// --system -    , ..   
git config --global user.name "My Name"
git config --global user.email "myemail@example.com"


Pengaturan tambahan:



//   
git config --list | -l --global

//   
git config --global --edit | -e


Membuat repositori:



git init


Membersihkan repositori:



// -d -  , -x -   , -f - 
git clean | -dxf


Menghapus file dan direktori:



// remove
git rm [file-name]
git rm -r [dir-name]

git rm --force | -f


Memindahkan file:



// git add + git remove
// move
git mv [old-file] [new-file]


Lihat status repositori:



git status


Menambahkan perubahan:



git add [file-name]

git add --force | -f

//  
git add . | --all | -A

//           .gitkeep


Menambahkan pesan (komit):



//  
git commit

//    ,    git add . | -A
//  ,      
git commit --message | -m "My Message"

//   ,  git add [file-name]   
git commit --all | -a -m | -am "My Message"

//  
git commit --amend "My Message" | --no-edit


Lihat komit:



//  
git show

//  
git show [hash] //   4 

//       
git show :/[string]

//    
git show [tag-name]


Melihat perbedaan antara komit:



git diff HEAD | @ // HEAD -  ,  ; @ -   HEAD

// staged
git diff --staged | --cached

git diff [hash1] [hash2]

//   
git diff [branch1]...[branch2]

//       
git commit --verbose | -v

//   
git diff --word-diff | --color-words


Lihat riwayat perubahan:



git log

// n -  
git log -n
// --since, --after - 
// --until, --before - 

// 
git log -p

//  
git log --graph --oneline --stat

//  
git log --pretty=format
// 
git log --pretty=format:'%C(red)%h %C(green)%cd %C(reset)| %C(blue)%s%d %C(yellow)[%an]' --date=short | format-local:'%F %R'

//    , , ; i -   
git log --grep | -G [string] | [file] | [branch] & -i

//    
git log --grep [string1] --grep [string2] --all-match

//     
git log -L '/<head>/','/<\/head>/':index.html

//   
git log --author=[name]


Pembatalan perubahan:



git reset
// --hard -     
// --soft -     
// --mixed -  :   ,   

git reset --hard [hash] | @~ // @~ -    HEAD

// 
git reset --hard ORIG_HEAD

//     
git checkout

git restore


Bekerja dengan cabang:



//  
git branch

//  
git branch [branch-name]

//   
git checkout [branch-name]

// branch + checkout
git checkout -b [branch-name]

// 
git branch -m [old-branch] [new-branch]

//  
git branch -d [branch-name]

//  
git merge [branch-name]


Menyelesaikan konflik penggabungan:



// ,   ,  

//     
git checkout --ours

//     
git checkout --theirs

//  
git reset --merge
git merge --abort

//   
git checkout --conflict=diff3 --merge [file-name]

//  
git merge --continue


Repositori jarak jauh:



// 
git clone [url] & [dir]

// 
git remote
git remote show
git remote add [shortname] [url]
git remote rename [old-name] [new-name]

//  
// git fetch + git merge
git pull

//  
git push


Tag:



// 
git tag

//  
git tag [tag-name]
//
git tag v1-beta

//  
git tag -a v1 -m "My Version 1"

// 
git tag -d [tag-name]


Debugging



git bisect

git blame

git grep


Menyimpan perubahan yang belum terikat:



// 
git stash

// 
git stash pop


Menyalin komit:



git cherry-pick | -x [hash]

//   
// 
git cherry-pick --abort

// 
git cherry-pick --continue

git cherry-pick --no-commit | -n

// --cherry = --cherry-mark --left-right --no-merges
git log --oneline --cherry [branch1] [branch2]


Relokasi:



git rebase [branch]

//   
// 
git rebase --abort

// 
git rebase --skip

// 
git rebase --continue

//   
git rebase --preserve-merges | -p

//  
git rebase -i [branch]


Konflik duplikat pelengkapan otomatis:



// rerere - reuse recorder resolution
// rerere.enabled true | false
// rerere.autoUpdate true | false
// rerere-train.sh -    rerere
git rerere forget [file-name]


Lakukan sebaliknya:



git revert @ | [hash]

//  
// git reset --hard @~  
git revert [hash] -m 1

// git merge [branch]  
//  
git revert [hash]

//    rebase
git rebase [branch1] [branch2] | --onto [branch1] [hash] [branch2]

git merge [branch]

git rebase [hash] --no-ff


Contoh alias (pintasan) untuk .gitconfig:



[alias]
    aa = add -A
    co = checkout
    ci = commit -m
    st = status
    br = branch


Contoh .gitconfig:
[user]
	name = [My Name]
	email = [myemail@example.com]
	username = [myusername]
[core]
	editor = [myeditor]
	whitespace = fix,-indent-with-non-tab,trailing-space,cr-at-eol
	pager = delta
[web]
	browser = google-chrome
[instaweb]
	httpd = apache2 -f
[rerere]
	enabled = 1
	autoupdate = 1
[push]
	default = matching
[color]
	ui = auto
[color "branch"]
	current = yellow bold
	local = green bold
	remote = cyan bold
[color "diff"]
	meta = yellow bold
	frag = magenta bold
	old = red bold
	new = green bold
	whitespace = red reverse
[color "status"]
	added = green bold
	changed = yellow bold
	untracked = red bold
[difftool]
	prompt = false
[delta]
	features = line-numbers decorations
	line-numbers = true
[delta "decorations"]
	minus-style = red bold normal
	plus-style = green bold normal
	minus-emph-style = white bold red
	minus-non-emph-style = red bold normal
	plus-emph-style = white bold green
	plus-non-emph-style = green bold normal
	file-style = yellow bold none
	file-decoration-style = yellow box
	hunk-header-style = magenta bold
	hunk-header-decoration-style = magenta box
	minus-empty-line-marker-style = normal normal
	plus-empty-line-marker-style = normal normal
	line-numbers-right-format = "{np:^4}│ "
[github]
	user = [username]
	token = token
[gitflow "prefix"]
	versiontag = v
[sequence]
	editor = interactive-rebase-tool
[alias]
	a = add --all
	ai = add -i
	###
	ap = apply
	as = apply --stat
	ac = apply --check
	###
	ama = am --abort
	amr = am --resolved
	ams = am --skip
	###
	b = branch
	ba = branch -a
	bd = branch -d
	bdd = branch -D
	br = branch -r
	bc = rev-parse --abbrev-ref HEAD
	bu = !git rev-parse --abbrev-ref --symbolic-full-name "@{u}"
	bs = !git-branch-status
	###
	c = commit
	ca = commit -a
	cm = commit -m
	cam = commit -am
	cem = commit --allow-empty -m
	cd = commit --amend
	cad = commit -a --amend
	ced = commit --allow-empty --amend
	###
	cl = clone
	cld = clone --depth 1
	clg = !sh -c 'git clone git://github.com/$1 $(basename $1)' -
	clgp = !sh -c 'git clone git@github.com:$1 $(basename $1)' -
	clgu = !sh -c 'git clone git@github.com:$(git config --get user.username)/$1 $1' -
	###
	cp = cherry-pick
	cpa = cherry-pick --abort
	cpc = cherry-pick --continue
	###
	d = diff
	dp = diff --patience
	dc = diff --cached
	dk = diff --check
	dck = diff --cached --check
	dt = difftool
	dct = difftool --cached
	###
	f = fetch
	fo = fetch origin
	fu = fetch upstream
	###
	fp = format-patch
	###
	fk = fsck
	###
	g = grep -p
	###
	l = log --oneline
	lg = log --oneline --graph --decorate
	###
	ls = ls-files
	lsf = !git ls-files | grep -i
	###
	m = merge
	ma = merge --abort
	mc = merge --continue
	ms = merge --skip
	###
	o = checkout
	om = checkout master
	ob = checkout -b
	opr = !sh -c 'git fo pull/$1/head:pr-$1 && git o pr-$1'
	###
	pr = prune -v
	###
	ps = push
	psf = push -f
	psu = push -u
	pst = push --tags
	###
	pso = push origin
	psao = push --all origin
	psfo = push -f origin
	psuo = push -u origin
	###
	psom = push origin master
	psaom = push --all origin master
	psfom = push -f origin master
	psuom = push -u origin master
	psoc = !git push origin $(git bc)
	psaoc = !git push --all origin $(git bc)
	psfoc = !git push -f origin $(git bc)
	psuoc = !git push -u origin $(git bc)
	psdc = !git push origin :$(git bc)
	###
	pl = pull
	pb = pull --rebase
	###
	plo = pull origin
	pbo = pull --rebase origin
	plom = pull origin master
	ploc = !git pull origin $(git bc)
	pbom = pull --rebase origin master
	pboc = !git pull --rebase origin $(git bc)
	###
	plu = pull upstream
	plum = pull upstream master
	pluc = !git pull upstream $(git bc)
	pbum = pull --rebase upstream master
	pbuc = !git pull --rebase upstream $(git bc)
	###
	rb = rebase
	rba = rebase --abort
	rbc = rebase --continue
	rbi = rebase --interactive
	rbs = rebase --skip
	###
	re = reset
	rh = reset HEAD
	reh = reset --hard
	rem = reset --mixed
	res = reset --soft
	rehh = reset --hard HEAD
	remh = reset --mixed HEAD
	resh = reset --soft HEAD
	rehom = reset --hard origin/master
	###
	r = remote
	ra = remote add
	rr = remote rm
	rv = remote -v
	rn = remote rename
	rp = remote prune
	rs = remote show
	rao = remote add origin
	rau = remote add upstream
	rro = remote remove origin
	rru = remote remove upstream
	rso = remote show origin
	rsu = remote show upstream
	rpo = remote prune origin
	rpu = remote prune upstream
	###
	rmf = rm -f
	rmrf = rm -r -f
	###
	s = status
	sb = status -s -b
	###
	sa = stash apply
	sc = stash clear
	sd = stash drop
	sl = stash list
	sp = stash pop
	ss = stash save
	ssk = stash save -k
	sw = stash show
	st = !git stash list | wc -l 2>/dev/null | grep -oEi '[0-9][0-9]*'
	###
	t = tag
	td = tag -d
	###
	w = show
	wp = show -p
	wr = show -p --no-color
	###
	svnr = svn rebase
	svnd = svn dcommit
	svnl = svn log --oneline --show-commit
	###
	subadd = !sh -c 'git submodule add git://github.com/$1 $2/$(basename $1)' -
	subrm = !sh -c 'git submodule deinit -f -- $1 && rm -rf .git/modules/$1 && git rm -f $1' -
	subup = submodule update --init --recursive
	subpull = !git submodule foreach git pull --tags origin master
	###
	assume = update-index --assume-unchanged
	unassume = update-index --no-assume-unchanged
	assumed = !git ls -v | grep ^h | cut -c 3-
	unassumeall = !git assumed | xargs git unassume
	assumeall = !git status -s | awk {'print $2'} | xargs git assume
	###
	bump = !sh -c 'git commit -am \"Version bump v$1\" && git psuoc && git release $1' -
	release = !sh -c 'git tag v$1 && git pst' -
	unrelease = !sh -c 'git tag -d v$1 && git pso :v$1' -
	merged = !sh -c 'git o master && git plom && git bd $1 && git rpo' -
	aliases = !git config -l | grep alias | cut -c 7-
	snap = !git stash save 'snapshot: $(date)' && git stash apply 'stash@{0}'
	bare = !sh -c 'git symbolic-ref HEAD refs/heads/$1 && git rm --cached -r . && git clean -xfd' -
	whois = !sh -c 'git log -i -1 --author=\"$1\" --pretty=\"format:%an <%ae>\"' -
	serve = daemon --reuseaddr --verbose --base-path=. --export-all ./.git
	###
	behind = !git rev-list --left-only --count $(git bu)...HEAD
	ahead = !git rev-list --right-only --count $(git bu)...HEAD
	###
	ours = "!f() { git checkout --ours $@ && git add $@; }; f"
	theirs = "!f() { git checkout --theirs $@ && git add $@; }; f"
	subrepo = !sh -c 'git filter-branch --prune-empty --subdirectory-filter $1 master' -
	human = name-rev --name-only --refs=refs/heads/*
[filter "lfs"]
	clean = git-lfs clean -- %f
	smudge = git-lfs smudge -- %f
	process = git-lfs filter-process
	required = true




Contoh .gitignore:
### Node ###

# Logs
logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Optional npm cache directory
.npm

# Dependency directories
/node_modules
/jspm_packages
/bower_components

# Yarn Integrity file
.yarn-integrity

# Optional eslint cache
.eslintcache

# dotenv environment variables file(s)
.env
.env.*

#Build generated
dist/
build/

# Serverless generated files
.serverless/

### SublimeText ###
# cache files for sublime text
*.tmlanguage.cache
*.tmPreferences.cache
*.stTheme.cache

# workspace files are user-specific
*.sublime-workspace

# project files should be checked into the repository, unless a significant
# proportion of contributors will probably not be using SublimeText
# *.sublime-project


### VisualStudioCode ###
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json

### Vim ###
*.sw[a-p]

### WebStorm/IntelliJ ###
/.idea
modules.xml
*.ipr
*.iml


### System Files ###
*.DS_Store

# Windows thumbnail cache files
Thumbs.db
ehthumbs.db
ehthumbs_vista.db

# Folder config file
Desktop.ini

# Recycle Bin used on file shares
$RECYCLE.BIN/

# Thumbnails
._*

# Files that might appear in the root of a volume
.DocumentRevisions-V100
.fseventsd
.Spotlight-V100
.TemporaryItems
.Trashes
.VolumeIcon.icns
.com.apple.timemachine.donotpresent




npm



npm adalah manajer paket yang memungkinkan Anda menginstal dependensi proyek.



Situs resmi: npmjs.com .



Instalasi.



NPM diinstal dengan Node.js .



Selain itu, npx diinstal bersama dengan Node.js, yang memungkinkan Anda menjalankan file yang dapat dieksekusi tanpa menginstal: npx create-react-app my-app.



Pemeriksaan instalasi:



node --version | -v
npm --version | -v


Memperbarui:



npm i -g npm@latest


Daftar perintah yang tersedia:



npm help
npm help [command-name]


Inisialisasi proyek:



npm init

// auto
npm init --yes | -y


Menginstal dependensi



npm install | i

//   
npm explore [package-name]

//   
npm doctor

// 
npm ci


Penginstalan ulang paksa dari dependensi:



npm i --force | -f


Menginstal hanya paket produksi:



npm i --only=production | --only=prod


Tambahkan ketergantungan:



npm i [package-name]
npm i [package-name@version]

// 
npm i express


Menambahkan ketergantungan pengembangan:



npm i --save-dev | -D [package-name]

// 
npm i -D nodemon


Pembaruan ketergantungan:



npm update | up [package-name]


Menghapus ketergantungan:



// dependency
npm remove | rm | r [package-name]

// devDependency
npm r -D [package-name]


Paket instal / perbarui / copot global:



npm i/up/r -g [package-name]

// 
npm i -g create-react-app
// 
create-react-app my-app


Menentukan paket usang:



npm outdated
npm outdated [package-name]


Daftar dependensi yang diinstal:



npm list | ls

// top level
npm ls --depth=0 | --depth 0

// global + top level
npm ls -g --depth 0


Informasi paket:



npm view | v [package-name]

// 
npm v react
npm v react.description


Jalankan skrip / eksekusi perintah:



npm run [script]

// 
// package.json: "scripts": { "dev": "nodemon server.js" }
npm run dev
// script start  node server.js
npm start
npm stop


Menghapus paket duplikat:



npm dedupe | ddp


Menghapus paket asing:



npm prune


Deteksi kerentanan (ancaman keamanan):



npm audit
// json
npm audit --json
// plain text
npm audit --parseable


Perbaikan otomatis dari kerentanan:



npm audit fix


benang



yarn, seperti npm, adalah manajer paket yang memungkinkan Anda menginstal dependensi proyek.



Situs resmi: yarnpkg.com .



Instalasi:



npm i -g yarn


Perintah "yarn dlx" memungkinkan Anda menjalankan file yang dapat dieksekusi tanpa menginstal: yarn dlx create-react-app my-app. Untuk melakukan ini, benang perlu diperbarui ke versi 2: benang versi set versi berry.



Pemeriksaan instalasi:



yarn --version | -v


Memperbarui:



yarn set version latest


Daftar perintah yang tersedia:



yarn help
yarn help [command-name]


Inisialisasi proyek:



yarn init

// auto
yarn init --yes | -y

// "private": true  package.json
yarn init --private | -p

// auto + private
yarn init -yp


Menginstal dependensi:



yarn
// 
yarn install

//  
yarn install --silent | -s

// 
yarn --check-files


Penginstalan ulang paksa dari dependensi:



yarn install --force


Menginstal hanya paket produksi:



yarn install --production | --prod


Tambahkan ketergantungan:



yarn add [package-name]
yarn add [package-name@version]

// 
yarn add express

//  
yarn add --silent
// 
yarn add -s


Menambahkan ketergantungan pengembangan:



yarn add --dev | -D [package-name]

// 
yarn add -D nodemon


Pembaruan ketergantungan:



yarn upgrade [package-name]


Menghapus ketergantungan:



yarn remove [package-name]


Paket instal / perbarui / copot global:



yarn global add/upgrade/remove [package-name]

// 
yarn global add create-react-app
// 
create-react-app my-app


Daftar dependensi yang diinstal:



yarn list

// top level
yarn list --depth=0 | --depth 0


Informasi paket:



yarn info [package-name]
// 
yarn why [package-name]

// 
yarn info react
yarn info react description
yarn why webpack


Jalankan skrip / eksekusi perintah:



yarn [script]
// 
yarn run [script]

// 
// package.json: "scripts": { "dev": "nodemon server.js" }
yarn dev


package.json



{
  "name": "my-app",
  "version": "1.0.0",
  "description": "my awesome app",
  "keywords": [
    "amazing",
    "awesome",
    "best"
  ],
  "private": true,
  "main": "server.js",
  "license": "MIT",
  "homepage": "https://my-website.com",
  "repository": {
    "type": "git",
    "url": "https://github.com/user/repo.git"
  },
  "repository": "github:user/repo",
  "author": {
    "name": "My Name",
    "email": "myemail@example.com",
    "url": "https://my-website.com"
  },
  "author": "My Name <myemail@example.com> (https://my-website.com)",
  "contributers": [
    {
      "name": "Friend Name",
      "email": "friendemail@example.com",
      "url": "https://friend-website.com"
    }
  ],
  "contributors": "Friend Name <friendemail.com> (https://friend-website.com)",
  "dependencies": {
    "express": "^4.17.1"
  },
  "devDependencies": {
    "nodemon": "^2.0.4"
  },
  "scripts": {
    "start": "react-scripts start",
    "dev": "nodemon server.js"
  }
}


  • nama - nama proyek
  • versi - versi proyek (lihat pembuatan versi)
  • description - deskripsi proyek (mengapa Anda membutuhkan paket?)
  • keywords - keywords (memudahkan pencarian di registry npm)
  • private — true npm
  • main —
  • repository — ( )
  • author — ( )
  • contributors — (, )
  • dependencies — (, )
  • devDependencies — (, )
  • scripts — ( , ), , , «yarn dev» «nodemon server.js»


Daftar lengkap kolom yang tersedia di file "package.json": npm-package.json



File "package-lock.json" dan "yarn.lock" berisi informasi yang lebih lengkap tentang paket yang diinstal daripada package.json, misalnya, versi paket tertentu daripada rentang versi yang valid.



Pembuatan versi



Setiap paket memiliki versi tiga digit (misalnya 1.0.0), dengan digit pertama adalah versi mayor, yang kedua adalah versi minor, dan yang ketiga adalah versi tambalan (patch). Rilis versi baru disebut rilis.



Meningkatkan setiap angka ini menurut aturan pembuatan versi semantik (semver) berarti sebagai berikut:



  • mayor - membuat perubahan tidak kompatibel dengan versi sebelumnya
  • minor - fungsionalitas baru yang kompatibel dengan versi sebelumnya
  • patch - perbaikan bug, perbaikan kecil


Rentang versi atau rilis valid ditentukan menggunakan operator berikut (pembanding):



  • * - versi apa pun (sama seperti string kosong)
  • <1.0.0 - versi apa pun yang kurang dari 1.0.0
  • <= 1.0.0 - versi apa pun yang kurang dari atau sama dengan 1.0.0
  • > 1.0.0 - versi apa pun yang lebih besar dari 1.0.0
  • > = 1.0.0 - versi apa pun yang lebih besar dari atau sama dengan 1.0.0
  • = 1.0.0 - hanya versi 1.0.0 (operator "=" dapat dihilangkan)
  • > = 1.0.0 <2.0.0 - lebih besar dari atau sama dengan 1.0.0 dan kurang dari 2.0.0
  • 1.0.0-2.0.0 - satu set versi inklusif
  • ^ 1.0.0 - rilis minor dan patch (> = 1.0.0 <2.0.0)
  • ~ .1.0.0 - hanya rilis patch (> = 1.0.0 <1.1.0)


Detail untuk semver: node-semver .



Terima kasih atas perhatian Anda.



All Articles