Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
git checkout -B master --track origin/masterorigin/master.alias s='git status'
alias k='gitk --all'
alias gl='git log --graph --decorate --pretty=oneline --abbrev-commit --color -n30'
alias gu='git remote -v update'
git "просто забери" origin/master
fu = pull --ff-only upstream:[remote "upstream"]
fetch = +refs/heads/*:refs/remotes/upstream/*
fetch = refs/heads/*:refs/heads/*
url = git://github.com/user/repo
pushurl = ssh://git@github.com/user/repo
push = refs/heads/develop
git fetch origin master:master или git pull --ff-only origin master.git fu с моим alias’ом и моим workflow будет постоянно считать, что провалился. Просто git fetch будет проваливаться с сообщением, что не может делать fetch в текущую ветку, поэтому используется «pull в значении fetch, если текущей ветки нет в upstream, и pull в значении „сделай всё и подвинь текущую ветку“, если она есть». Но при этом после fetch будет проваливаться merge, т.к. он не знает, с чем сливать (что меня устраивает, т.к. я хотел сделать только fetch).git reflog бывает полезен в таких случаяхchattr +i filename или chattr +a filename от root’а и получаете неудаляемый (даже самим root’ом*) файл при наличии прав на него. Также можно при желании настроить AppArmor/SElinux, чтобы git не мог что‐то удалить (но при этом права, в т.ч. на запись будут). Не знаю, правда, что вернёт stat в последнем случае. Но в обоих случаях бага в ядре и рассыпавшейся файловой системы нет, а невозможность удалить файл есть.chattr (а также прямым редактированием блочного устройства, монтированием файловой системы с использованием собственного драйвера, игнорирующего атрибуты, или любым другим из 100500 грязных хаков, недоступных для обычного пользователя).ДелаетеВы сами-то поняли что сказали? Как вы можете говорить, что у вас есть права доступа к файлу, если вы их сами же и отобрали?chattr +i filenameилиchattr +a filenameот root’а и получаете неудаляемый (даже самим root’ом*) файл при наличии прав на него.
Вы сами-то поняли что сказали? Как вы можете говорить, что у вас есть права доступа к файлу, если вы их сами же и отобрали?Права на запись и атрибуты файла — это разные сущности. Этим действием я ни у кого не отбираю права, я оставляю указание драйверу файловой системы, что ему надо делать с этим файлом. Поэтому root спокойно игнорирует отсутствие у него прав на запись, но не игнорирует атрибуты. Правда, несмотря на различный смысл, проверяется всё (атрибуты и права) практически в одном месте, по крайней мере в ядре linux.
git pull — злое злостное зло
git rebase — потенциальная проблема. Например, некоторые проблемы rebase описаны в книге «Pro Git» — "The Perils of Rebasing". Моё мнение — лучше делать merge, чем rebase.git config --global gc.auto 0. И под сборку мусора коммиты попадут только через 30 дней, если не выкручивать никаких ручек вроде gc.reflogExpireUnreachable.git fsck --unreachable | awk '{print $3}' | while read hash; do echo $hash; git show $hash | grep 'тут кусок - разница'; done
rebase -i, чтобы убедиться, что перенесены будут именно ожидаемые коммиты.:cq<CR>: тогда git будет считать, что он не смог запустить редактор и отменит rebase (:cquit заставляет Vim выйти с кодом возврата 1).up = !(git add . && git stash && git pull --rebase >&2) | grep -v 'No local changes to save' && git stash popgit rebase --autostash и соответствующая настройка rebase.autostash. Я, правда, не в курсе, когда это появилось. У меня версия 1.8.5.5.git gc, после него вы бы ничего не нашли). Авторы git же считают, что про git reflog надо было читать, до того, как вы написали git rebase, а запуск git gc --auto после rebase — это вообще свинство.git gc не слишком полезен.gc.reflogExpire [90 дней по умолчанию] и gc.reflogExpireUnreachable [30 дней по умолчанию]).gc.pruneExpire [2 недели по умолчанию]).
Странный глюк Git, чуть не стоивший 10 часов работы