Hier ist ein kurzer Spickzettel für die grundlegenden Befehle bash, git, npm, yarn, package.json und semver.
Konventionen: [Verzeichnisname] - bezeichnet den Namen des Verzeichnisses, | - bedeutet "oder".
Ich empfehle, jeden Befehl in das Terminal einzugeben und die Ausgabe sorgfältig zu studieren, damit Sie sich schnell an sie erinnern und feststellen können, welche Befehle Sie benötigen und welche nicht.
Ich entschuldige mich für mögliche Fehler und Tippfehler. Ich würde mich über Kommentare und Vorschläge freuen.
Ohne weitere Präambel.
Inhaltsverzeichnis:
Bash
bash ist ein Befehlszeilenprogramm, mit dem Sie einige allgemeine Aufgaben ausführen können.
Installation: In meinem Fall wurde bash zusammen mit git installiert.
Referenz:
help
Befehlsverlauf:
history
Terminalbereinigung:
clear
Verlassen des Terminals:
exit
Verzeichniserstellung:
// make directory
mkdir [dir-name]
//
mkdir my-app
//
mkdir -p {dir1,dir2}
//
mkdir -p my-app/{css,js}
Ändere die Richtung:
// change directory
cd [dir-name]
//
cd my-app
//
cd !$
//
cd ..
//
cd ../..
//
cd -
//
cd ~
Pfad zum aktuellen Verzeichnis:
// print work directory
pwd
Liste der Dateien:
// list
ls
//
ls -a | -f
//
// ,
ls -l
Dateierstellung:
touch [file-name]
//
touch index.html
//
touch my-app/{index.html,css/style.css,js/script.js}
Dateiinhalt:
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]
Kopieren, Verschieben und Löschen einer Datei:
// 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]
Ausgabe an den Anschluss der Leitung:
echo [string]
//
echo hello
//
echo hello > greet.txt
//
echo hello >> greet.txt
Datei-Upload:
wget [url]
Anschlüsse:
true && echo hello
false || echo hello
echo hello ; ls
Förderer:
// - \n
cat [file] | wc -l
git
git ist ein verteiltes Versionskontrollsystem, mit dem Sie den Prozess des Vornehmens von Änderungen an einem Projekt steuern können.
Pro Git Buch .
Screencast von Ilya Kantor .
Schnellstart: Git How To .
Installation: git-scm.com .
Installationsprüfung:
git --version
Referenz:
git help
git help [command-name]
git [command-name] --help | -h
Mindesteinstellungen:
// --local -
// --global -
// --system - , ..
git config --global user.name "My Name"
git config --global user.email "myemail@example.com"
Zusätzliche Einstellungen:
//
git config --list | -l --global
//
git config --global --edit | -e
Repository erstellen:
git init
Repository bereinigen:
// -d - , -x - , -f -
git clean | -dxf
Dateien und Verzeichnisse entfernen:
// remove
git rm [file-name]
git rm -r [dir-name]
git rm --force | -f
Dateien verschieben:
// git add + git remove
// move
git mv [old-file] [new-file]
Zeigen Sie den Status des Repositorys an:
git status
Änderungen hinzufügen:
git add [file-name]
git add --force | -f
//
git add . | --all | -A
// .gitkeep
Hinzufügen einer Nachricht (Festschreiben):
//
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
Commit anzeigen:
//
git show
//
git show [hash] // 4
//
git show :/[string]
//
git show [tag-name]
Anzeigen des Unterschieds zwischen Commits:
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
Änderungsverlauf anzeigen:
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]
Stornierung von Änderungen:
git reset
// --hard -
// --soft -
// --mixed - : ,
git reset --hard [hash] | @~ // @~ - HEAD
//
git reset --hard ORIG_HEAD
//
git checkout
git restore
Arbeiten mit Filialen:
//
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]
Zusammenführungskonflikte lösen:
// , ,
//
git checkout --ours
//
git checkout --theirs
//
git reset --merge
git merge --abort
//
git checkout --conflict=diff3 --merge [file-name]
//
git merge --continue
Remote-Repository:
//
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
Stichworte:
//
git tag
//
git tag [tag-name]
//
git tag v1-beta
//
git tag -a v1 -m "My Version 1"
//
git tag -d [tag-name]
Debuggen
git bisect
git blame
git grep
Nicht festgeschriebene Änderungen speichern:
//
git stash
//
git stash pop
Commit kopieren:
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]
Umzug:
git rebase [branch]
//
//
git rebase --abort
//
git rebase --skip
//
git rebase --continue
//
git rebase --preserve-merges | -p
//
git rebase -i [branch]
Doppelte Konflikte automatisch vervollständigen:
// rerere - reuse recorder resolution
// rerere.enabled true | false
// rerere.autoUpdate true | false
// rerere-train.sh - rerere
git rerere forget [file-name]
Reverse Commits:
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
Ein Beispiel für Aliase (Verknüpfungen) für .gitconfig:
[alias]
aa = add -A
co = checkout
ci = commit -m
st = status
br = branch
Beispiel .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
Beispiel .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 ist ein Paketmanager, mit dem Sie Projektabhängigkeiten installieren können.
Offizielle Seite: npmjs.com .
Installation.
npm mit Node.js installiert .
Außerdem wird npx zusammen mit Node.js installiert, sodass Sie ausführbare Dateien ausführen können, ohne Folgendes zu installieren: npx create-react-app my-app.
Installationsprüfung:
node --version | -v
npm --version | -v
Aktualisieren:
npm i -g npm@latest
Liste der verfügbaren Befehle:
npm help
npm help [command-name]
Projektinitialisierung:
npm init
// auto
npm init --yes | -y
Abhängigkeiten installieren
npm install | i
//
npm explore [package-name]
//
npm doctor
//
npm ci
Erzwungene Neuinstallation von Abhängigkeiten:
npm i --force | -f
Nur Produktionspakete installieren:
npm i --only=production | --only=prod
Abhängigkeit hinzufügen:
npm i [package-name]
npm i [package-name@version]
//
npm i express
Hinzufügen einer Entwicklungsabhängigkeit:
npm i --save-dev | -D [package-name]
//
npm i -D nodemon
Abhängigkeitsaktualisierung:
npm update | up [package-name]
Entfernen von Abhängigkeiten:
// dependency
npm remove | rm | r [package-name]
// devDependency
npm r -D [package-name]
Globales Paket zum Installieren / Aktualisieren / Deinstallieren:
npm i/up/r -g [package-name]
//
npm i -g create-react-app
//
create-react-app my-app
Feststellen veralteter Pakete:
npm outdated
npm outdated [package-name]
Liste der installierten Abhängigkeiten:
npm list | ls
// top level
npm ls --depth=0 | --depth 0
// global + top level
npm ls -g --depth 0
Paketinformationen:
npm view | v [package-name]
//
npm v react
npm v react.description
Skriptausführung / Befehlsausführung:
npm run [script]
//
// package.json: "scripts": { "dev": "nodemon server.js" }
npm run dev
// script start node server.js
npm start
npm stop
Doppelte Pakete entfernen:
npm dedupe | ddp
Entfernen von Fremdverpackungen:
npm prune
Erkennung von Schwachstellen (Sicherheitsbedrohungen):
npm audit
// json
npm audit --json
// plain text
npm audit --parseable
Schwachstellen automatisch beheben:
npm audit fix
Garn
Garn ist wie npm ein Paketmanager, mit dem Sie Projektabhängigkeiten installieren können.
Offizielle Seite: yarnpkg.com .
Installation:
npm i -g yarn
Mit dem Befehl "yarn dlx" können Sie ausführbare Dateien ausführen, ohne sie zu installieren: yarn dlx create-react-app my-app. Dazu muss das Garn auf die zweite Version aktualisiert werden: Garnsatzversion Berry.
Installationsprüfung:
yarn --version | -v
Aktualisieren:
yarn set version latest
Liste der verfügbaren Befehle:
yarn help
yarn help [command-name]
Projektinitialisierung:
yarn init
// auto
yarn init --yes | -y
// "private": true package.json
yarn init --private | -p
// auto + private
yarn init -yp
Abhängigkeiten installieren:
yarn
//
yarn install
//
yarn install --silent | -s
//
yarn --check-files
Erzwungene Neuinstallation von Abhängigkeiten:
yarn install --force
Nur Produktionspakete installieren:
yarn install --production | --prod
Abhängigkeit hinzufügen:
yarn add [package-name]
yarn add [package-name@version]
//
yarn add express
//
yarn add --silent
//
yarn add -s
Hinzufügen einer Entwicklungsabhängigkeit:
yarn add --dev | -D [package-name]
//
yarn add -D nodemon
Abhängigkeitsaktualisierung:
yarn upgrade [package-name]
Entfernen von Abhängigkeiten:
yarn remove [package-name]
Globales Paket zum Installieren / Aktualisieren / Deinstallieren:
yarn global add/upgrade/remove [package-name]
//
yarn global add create-react-app
//
create-react-app my-app
Liste der installierten Abhängigkeiten:
yarn list
// top level
yarn list --depth=0 | --depth 0
Paketinformationen:
yarn info [package-name]
//
yarn why [package-name]
//
yarn info react
yarn info react description
yarn why webpack
Skriptausführung / Befehlsausführung:
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"
}
}
- Name - Projektname
- version - Projektversion (siehe Versionierung)
- Beschreibung - Projektbeschreibung (warum brauchen Sie ein Paket?)
- Schlüsselwörter - Schlüsselwörter (erleichtert das Durchsuchen der npm-Registrierung)
- private — true npm
- main —
- repository — ( )
- author — ( )
- contributors — (, )
- dependencies — (, )
- devDependencies — (, )
- scripts — ( , ), , , «yarn dev» «nodemon server.js»
Vollständige Liste der verfügbaren Felder in der Datei "package.json": npm-package.json
Die Dateien "package-lock.json" und "yarn.lock" enthalten vollständigere Informationen zu installierten Paketen als package.json, z. B. bestimmte Paketversionen anstelle eines Bereichs gültige Versionen.
Versionierung
Jedes Paket hat eine dreistellige Version (z. B. 1.0.0), wobei die erste Ziffer die Hauptversion (Haupt), die zweite die Nebenversion (Nebenversion) und die dritte die Patch-Version (Patch) ist. Die Veröffentlichung einer neuen Version wird als Veröffentlichung bezeichnet.
Das Erhöhen jeder dieser Zahlen gemäß den semantischen Versionsregeln (Semver) bedeutet Folgendes:
- major - Änderungen inkompatibel mit der vorherigen Version
- Moll - neue Funktionalität, die mit der vorherigen Version kompatibel ist
- Patch - Bugfixes, kleinere Verbesserungen
Versionsbereiche oder gültige Releases werden mit den folgenden Operatoren (Komparatoren) ermittelt:
- * - jede Version (wie leere Zeichenfolge)
- <1.0.0 - jede Version unter 1.0.0
- <= 1.0.0 - jede Version kleiner oder gleich 1.0.0
- > 1.0.0 - jede Version größer als 1.0.0
- > = 1.0.0 - jede Version größer oder gleich 1.0.0
- = 1.0.0 - nur Version 1.0.0 (der Operator "=" kann weggelassen werden)
- > = 1.0.0 <2.0.0 - größer oder gleich 1.0.0 und kleiner als 2.0.0
- 1.0.0-2.0.0 - eine Reihe von Versionen inklusive
- ^ 1.0.0 - Minor- und Patch-Releases (> = 1.0.0 <2.0.0)
- ~ .1.0.0 - nur Patch-Releases (> = 1.0.0 <1.1.0)
Details für Semver: Node-Semver .
Danke für die Aufmerksamkeit.