Aqui está uma folha de dicas rápida para os comandos básicos bash, git, npm, yarn, package.json e semver.
Convenções: [dir-name] - significa o nome do diretório, | - significa "ou".
Recomendo inserir cada comando no terminal e estudar cuidadosamente a saída, para que você se lembre deles rapidamente e determine quais comandos você precisa e quais não.
Peço desculpas por quaisquer possíveis erros e erros tipográficos. Terei todo o prazer em quaisquer comentários e sugestões.
Sem mais prefácio.
Índice:
bash
bash é uma ferramenta de linha de comando que permite fazer algumas coisas comuns.
Instalação: no meu caso, o bash foi instalado junto com o git.
Referência:
help
Histórico de comando:
history
Limpeza do terminal:
clear
Saindo do terminal:
exit
Criação de diretório:
// make directory
mkdir [dir-name]
//
mkdir my-app
//
mkdir -p {dir1,dir2}
//
mkdir -p my-app/{css,js}
Alterar diretório:
// change directory
cd [dir-name]
//
cd my-app
//
cd !$
//
cd ..
//
cd ../..
//
cd -
//
cd ~
Caminho para o diretório atual:
// print work directory
pwd
Lista de arquivos:
// list
ls
//
ls -a | -f
//
// ,
ls -l
Criação de arquivo:
touch [file-name]
//
touch index.html
//
touch my-app/{index.html,css/style.css,js/script.js}
Conteúdo do arquivo:
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]
Copiar, mover e excluir um arquivo:
// 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]
Saída para o terminal da linha:
echo [string]
//
echo hello
//
echo hello > greet.txt
//
echo hello >> greet.txt
Upload de arquivo:
wget [url]
Conectores:
true && echo hello
false || echo hello
echo hello ; ls
Transportador:
// - \n
cat [file] | wc -l
idiota
git é um sistema de controle de versão distribuído que permite controlar o processo de fazer alterações em um projeto.
Livro Pro Git .
Screencast de Ilya Kantor .
Início rápido: Git How To .
Instalação: git-scm.com .
Verificação de instalação:
git --version
Referência:
git help
git help [command-name]
git [command-name] --help | -h
Configurações mínimas:
// --local -
// --global -
// --system - , ..
git config --global user.name "My Name"
git config --global user.email "myemail@example.com"
Configurações adicionais:
//
git config --list | -l --global
//
git config --global --edit | -e
Criação de um repositório:
git init
Limpando o repositório:
// -d - , -x - , -f -
git clean | -dxf
Removendo arquivos e diretórios:
// remove
git rm [file-name]
git rm -r [dir-name]
git rm --force | -f
Movendo arquivos:
// git add + git remove
// move
git mv [old-file] [new-file]
Veja o estado do repositório:
git status
Adicionando alterações:
git add [file-name]
git add --force | -f
//
git add . | --all | -A
// .gitkeep
Adicionando uma mensagem (commit):
//
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
Ver confirmação:
//
git show
//
git show [hash] // 4
//
git show :/[string]
//
git show [tag-name]
Visualizando a diferença entre 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
Exibir histórico de alterações:
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]
Cancelamento de alterações:
git reset
// --hard -
// --soft -
// --mixed - : ,
git reset --hard [hash] | @~ // @~ - HEAD
//
git reset --hard ORIG_HEAD
//
git checkout
git restore
Trabalhando com filiais:
//
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]
Resolvendo conflitos de mesclagem:
// , ,
//
git checkout --ours
//
git checkout --theirs
//
git reset --merge
git merge --abort
//
git checkout --conflict=diff3 --merge [file-name]
//
git merge --continue
Repositório remoto:
//
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]
Depurando
git bisect
git blame
git grep
Salvando alterações não confirmadas:
//
git stash
//
git stash pop
Copiando um commit:
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]
Realocação:
git rebase [branch]
//
//
git rebase --abort
//
git rebase --skip
//
git rebase --continue
//
git rebase --preserve-merges | -p
//
git rebase -i [branch]
Conflitos duplicados de preenchimento automático:
// rerere - reuse recorder resolution
// rerere.enabled true | false
// rerere.autoUpdate true | false
// rerere-train.sh - rerere
git rerere forget [file-name]
Reverter 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
Um exemplo de aliases (atalhos) para .gitconfig:
[alias]
aa = add -A
co = checkout
ci = commit -m
st = status
br = branch
Exemplo .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
Exemplo .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 é um gerenciador de pacotes que permite instalar dependências do projeto.
Site oficial: npmjs.com .
Instalação.
npm instalado com Node.js .
Além disso, o npx é instalado junto com o Node.js, o que permite que você execute executáveis sem instalar: npx create-react-app my-app.
Verificação de instalação:
node --version | -v
npm --version | -v
Atualizar:
npm i -g npm@latest
Lista de comandos disponíveis:
npm help
npm help [command-name]
Inicialização do projeto:
npm init
// auto
npm init --yes | -y
Instalando dependências
npm install | i
//
npm explore [package-name]
//
npm doctor
//
npm ci
Reinstalação forçada de dependências:
npm i --force | -f
Instalando apenas pacotes de produção:
npm i --only=production | --only=prod
Adicionar dependência:
npm i [package-name]
npm i [package-name@version]
//
npm i express
Adicionando uma dependência de desenvolvimento:
npm i --save-dev | -D [package-name]
//
npm i -D nodemon
Atualização de dependência:
npm update | up [package-name]
Remoção de dependência:
// dependency
npm remove | rm | r [package-name]
// devDependency
npm r -D [package-name]
Pacote global de instalação / atualização / desinstalação:
npm i/up/r -g [package-name]
//
npm i -g create-react-app
//
create-react-app my-app
Determinando pacotes obsoletos:
npm outdated
npm outdated [package-name]
Lista de dependências instaladas:
npm list | ls
// top level
npm ls --depth=0 | --depth 0
// global + top level
npm ls -g --depth 0
Informações do pacote:
npm view | v [package-name]
//
npm v react
npm v react.description
Execução de script / execução de comando:
npm run [script]
//
// package.json: "scripts": { "dev": "nodemon server.js" }
npm run dev
// script start node server.js
npm start
npm stop
Removendo pacotes duplicados:
npm dedupe | ddp
Removendo pacotes estranhos:
npm prune
Detecção de vulnerabilidades (ameaças de segurança):
npm audit
// json
npm audit --json
// plain text
npm audit --parseable
Correção automática de vulnerabilidades:
npm audit fix
fio
yarn, como o npm, é um gerenciador de pacotes que permite instalar dependências de projeto.
Site oficial: yarnpkg.com .
Instalação:
npm i -g yarn
O comando "yarn dlx" permite que você execute executáveis sem instalar: yarn dlx create-react-app my-app. Para fazer isso, o fio precisa ser atualizado para a versão 2: versão do conjunto de fios berry.
Verificação de instalação:
yarn --version | -v
Atualizar:
yarn set version latest
Lista de comandos disponíveis:
yarn help
yarn help [command-name]
Inicialização do projeto:
yarn init
// auto
yarn init --yes | -y
// "private": true package.json
yarn init --private | -p
// auto + private
yarn init -yp
Instalando dependências:
yarn
//
yarn install
//
yarn install --silent | -s
//
yarn --check-files
Reinstalação forçada de dependências:
yarn install --force
Instalando apenas pacotes de produção:
yarn install --production | --prod
Adicionar dependência:
yarn add [package-name]
yarn add [package-name@version]
//
yarn add express
//
yarn add --silent
//
yarn add -s
Adicionando uma dependência de desenvolvimento:
yarn add --dev | -D [package-name]
//
yarn add -D nodemon
Atualização de dependência:
yarn upgrade [package-name]
Remoção de dependência:
yarn remove [package-name]
Pacote global de instalação / atualização / desinstalação:
yarn global add/upgrade/remove [package-name]
//
yarn global add create-react-app
//
create-react-app my-app
Lista de dependências instaladas:
yarn list
// top level
yarn list --depth=0 | --depth 0
Informações do pacote:
yarn info [package-name]
//
yarn why [package-name]
//
yarn info react
yarn info react description
yarn why webpack
Execução de script / execução de comando:
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"
}
}
- nome - nome do projeto
- versão - versão do projeto (ver versão)
- descrição - descrição do projeto (por que você precisa de um pacote?)
- palavras-chave - palavras-chave (torna mais fácil pesquisar o registro npm)
- private — true npm
- main —
- repository — ( )
- author — ( )
- contributors — (, )
- dependencies — (, )
- devDependencies — (, )
- scripts — ( , ), , , «yarn dev» «nodemon server.js»
Uma lista completa de campos disponíveis no arquivo "package.json": npm-package.json
Os arquivos "package-lock.json" e "yarn.lock" contêm informações mais completas sobre os pacotes instalados do que o package.json, por exemplo, versões específicas do pacote em vez de um intervalo versões válidas.
Controle de versão
Cada pacote tem uma versão de três dígitos (por exemplo, 1.0.0), onde o primeiro dígito é a versão principal, o segundo é a versão secundária e o terceiro é a versão do patch (patch). O lançamento de uma nova versão é chamado de lançamento.
Aumentar cada um desses números de acordo com as regras de controle de versão semântica (semver) significa o seguinte:
- major - fazer alterações incompatíveis com a versão anterior
- menor - nova funcionalidade compatível com a versão anterior
- patch - correções de bugs, pequenas melhorias
Intervalos de versão ou lançamentos válidos são determinados usando os seguintes operadores (comparadores):
- * - qualquer versão (igual à string vazia)
- <1.0.0 - qualquer versão inferior a 1.0.0
- <= 1.0.0 - qualquer versão menor ou igual a 1.0.0
- > 1.0.0 - qualquer versão superior a 1.0.0
- > = 1.0.0 - qualquer versão maior ou igual a 1.0.0
- = 1.0.0 - versão 1.0.0 apenas (o operador "=" pode ser omitido)
- > = 1.0.0 <2.0.0 - maior ou igual a 1.0.0 e menor que 2.0.0
- 1.0.0-2.0.0 - um conjunto de versões inclusivas
- ^ 1.0.0 - versões secundárias e de patch (> = 1.0.0 <2.0.0)
- ~ .1.0.0 - somente versões de patch (> = 1.0.0 <1.1.0)
Detalhes para semver: node-semver .
Obrigado pela atenção.