Полезные ссылки, bash, git
С удовольствием приму от вас уточнения, исправления, tools & hacks на: zabrosov[at]gmail.com
http://htmlbook.ru/ # секреты html и CSS с примерами http://www.worldtimebuddy.com/ # международное время, очень удобно для тех кто работает с другими временными поясами http://www.commandlinefu.com/ # мини скрипты на все случаи жизни http://mirror.yandex.ru/ # все дистрибутивы и репозитории в одном месте
git clone --bare hello hello.git # создали чистый репозиторий для удаленной работы git clone # рабочая копия git init # инициализация репо git rm --cached readme.txt # это удалить файл из индекса, оставив его при этом в вашем рабочем каталоге git rm grit.gemspec # удаление из под индекса git rm grit.gemspec -f # принудительное удаление git rm log/\*.log # обратный слэш (\) перед*, регексп для удаления git mv file_from file_to # переименование\перемещение файла git log -p -2 # история изменений +2 строки изменений из файла git log --pretty=oneline # список в одну строку log — --graph # вывод графа веток git log --since=2.weeks # показать за 2 недели git log --pretty="%h - %s" --author=gitster --since="2008-10-01" --before="2008-11-01" --no-merges -- tgit hist --max-count=1 # поиск последнего коммита git cat-file -t # смотрим что за операция |git type git cat-file -p # смотрим иформацию по хешу | git dump git commit --amend # изменение комментария к коммиту или добавление изменений к коммиту (исползуется последний хеш) git reset HEAD # отмен последнего индекса (только индекс, не коммит) git checkout -- filename # отмеение последних изменений в файле (перезапись файла файлом из предыдущего коммита) git reset --hard v1 # отменяем коммиты и переносим мастер, чистим историю git reset HEAD hello.html # сброс индекса файла к предыдущему коммиту, чистим истрию git revert HEAD # возврат к предыдущий версии (отменяющий коммит), сохраняем историю git checkout master # отменять изменения в рабочем каталог git remote -v # просмотр удаленных URL репозиториев; # origin — это единственный удалённый сервер прописанный как SSH ссылка, # поэтому он единственный, в который я могу помещать свои изменения git clone git://github.com/paulboone/ticgit.git # склонировали удаленный репо git remote add pb git://github.com/paulboone/ticgit.git # Добвление удаленных репозиториев git remote rm paul # удаление удаленных репозиториев git fetch pb # добавляем все данные из удаленного рпозитрия. которых нет у нас в отдельную ветку git pull [remote-name] # добавляем и сливаем с нашей веткой git push [удал. сервер] [ветка], git push origin master # складываем наши данные на удаленный сервер origin в ветку master git branch --track style origin/style # добавляем и трекаем ветку удаленного репо у себя локально git remote show [удал. сервер] # смотрим ветки репозитория git remote rename pb paul # переименовать для себя и у себя git tag -l 'v1.4.2.*' # поиск по шаблону тегов git tag -a v1.4 -m 'my version 1.4' # добовляем тяжелую метку (создается вся мето информация) git tag v1.4-lw git push origin --tags # отправляем метки на сервер git branch name # создание ветки git checkout testing # переход в ноыую ветку git checkout -b testing # создать ветку и перейти на неё git branch -d hotfix # удалить ветку
cat << 'MEME' >> ~/.bashrc # удобно дописывать в файл
function parse_git_branch {
git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1) /'
}
PS1="[\u@\h \W]\$ "
PS1="${PS1}$YELLOW\$(parse_git_branch)$WHITE"
alias g="git "
alias gf="git fetch "
alias gst="git status "
alias gs='git status '
alias ga='git add '
alias gb='git branch '
alias gc='git commit'
alias gd='git diff'
alias go='git checkout
MEME
cat .gitconfig
[core]
autocrlf = input
safecrlf = true
excludesfile = /home/zabrosov/.gitignore_global
[user]
name = zabrosov
email = zabrosv[at]gmail.com
[alias] # набор алиасов для вывода history, '\'-обозначил перенос строки
co = checkout
ci = commit
st = status
br = branch
hist = log --pretty=format:\"%h %ad | %s%d [%an]\" --graph --date=short
lall = log --pretty=format:\"%h %ad | %s%d [%an]\" --all --graph
lof = log --pretty=format:'%C(cyan)%ar %C(yellow)%C(bold)%an%C(reset) %C(cyan)committed%C(reset) \
[%h]%C(yellow)%C(bold)%d:%n%C(green)%s%C(reset)' --name-only
tree = log --graph --abbrev-commit --decorate --date=relative \
--format=format:'-> %C(cyan)%ar%C(reset) %C(green)%an%C(reset) %C(cyan)committed%C(reset) \
%C(yellow)%h%C(reset) %C(cyan)saying%C(reset):%C(yellow)%d%C(reset) %C(white)%s%C(reset)' --all
ls = log --pretty=format:"%C(yellow)%h%Cred%d\\ %Creset%s%Cblue\\ [%cn]" --decorate
type = cat-file -t
dump = cat-file -p
[color]
ui = true
[difftool "sourcetree"]
cmd = opendiff \"$LOCAL\" \"$REMOTE\"
path =
[mergetool "sourcetree"]
cmd = /Applications/SourceTree.app/Contents/Resources/opendiff-w.sh \"$LOCAL\" \"$REMOTE\" -ancestor \"$BASE\" -merge \"$MERGED\"
trustExitCode = true
if [[ ! -f ~/.bashrc && ! -f ~/.env ]]; then echo "ERROR: no profile"; exit 1; fi [[ ! -f ~/.bashrc && ! -f ~/.env ]] && (echo "ERROR: no profile"; exit 1) [[ ! -f ~/.bashrc && ! -f ~/.env ]] || (echo "YES: profile is here";) # -a file Правда, если file существует # -b file Правда, если file существует и это специальный блоковый файл # -c file Правда, если file существует и это специальный знаковый файл # -d file Правда, если file существует и это директория # -e file Правда, если file существует # -f file Правда, если file существует и это регулярный файл # -g file Правда, если file существует и установлен SGID бит # -h file Правда, если file существует и это символический ссылка # -k file Правда, если file существует и второй промежуточный бит округления установлен # -p file Правда, если file существует и это named pipe (FIFO) # -r file Правда, если file существует и он доступен на чтение # -s file Правда, если file существует и больше нуля # -u file Правда, если file существует и SUID (set user ID) бит установлен # -w file Правда, если file существует и он доступен на запись # -x file Правда, если file существует и он доступен на исполнение # -O file Правда, если file существует принадлежит существующему пользователю # -G file Правда, если file существует принадлежит существующей группе # -L file Правда, если file существует и это символический ссылка # -N file Правда, если file существует и был изменен с тех пор как был прочитан # -S file Правда, если file существует и это сокет # file1 -nt file2 Правда, если файл file1 изменялся чаще чем file2, или есои file1 существует, а file2 нет # file1 -ot file2 Правда, если файл file1 старше чем file2, или file1 существует, а file2 нет # file1 -ef file2 Правда, если file1 и file2 относятся к одному устройству и номеру инода # -o OPTIONNAME Правда, если shell опция "OPTIONNAME" включена # -z string Правда, если длинна "string" равна 0 (пустая строка) # -n string or string Правда, если длинна "string" не равна 0 (не пустая строка) # string1 == string2 Правда, если выражения эквивалентны # string1 != string2 Правда, если выражения не эквивалентны # string1 < string2 Правда, если "string1" лексикографически упорядоченно до "string2" # string1 > string2 Правда, если "string1" лексикографически упорядоченно после "string2" if [ $? -ne 0 ];then usage exit 1 fi
Результат true если "ARG1" к "ARG2":
-eq: эквивалентен
-ne: не эквивалентен
-lt: меньше чем
-le: меньше или равно
-gt: больше
-ge: больше или равно
# [ ! EXPR ] Правда, если выражение EXPR не справедливо # [ ( EXPR ) ] Возвращает значение EXPR. Это может быть использовано для изменения приоритета операторов # [ EXPR1 -a EXPR2 ] Правда, если оба выражения EXPR1 и EXPR2 справедливы # [ EXPR1 -o EXPR2 ] Правда, если хотя бы одно выражение EXPR1 или EXPR2 справедливы