z_r

Велосипед с шестигранными колесами.

Mar 18, 2011 16:13

Пока писал, не один раз приходила мысль что это какая-то хрень и у меня как-то криво налажен рабочий процесс.
Вообще это все наводит на мысли о персональном дропбоксе для текстовой информации на собственном сервере. Все это кроссплатформенно, свое и все такое.


Большую часть времени я работаю с кодом в workcopy (в терминологии svn), весь код лежит в папке repository/имя_проекта.
Оттуда обычно все через IDE льется на девелоперский сервак лиюо запускается локально.

Вроде все хорошо, все в одном месте, но есть ньюансы.
Большая часть проектов у нас выкладывается из транка (только только начинаем пользоваться бранчами и тегами), соответственно промежуточную версию коммитить нельзя (вернее можно, но с оговорками). А задача бывает довольно долгой.

Иногда IDE сбоит в svn модуле и происходит хрень. Иногда в мозгу происходит сбой и опять же хрень.

В помощь себе я сделал так (чтоб у меня всегда локально был бекап).

Локально в отдельной папке создал bare репозиторий git (repository.git/), в папке repository/ создал привязанный к repository.git репозиторий.
Если проще, то repository.git у меня центральный, а repository это типа рабочей копии, исключил всю хрень из индекса кроме текстов, чтоб бекапы не забилип весь диск.

В крон добавил скрипт с примерно таким содержанием:

#!/bin/bash

#Устанавливаем папки
#ТО, с чем работаем
FOLDER="/home/max/work/repository"
#Типа центральный реп
REP="/home/max/work/repository.git"

#Вежливо здороваемся с консолью
echo "Hello! ^_^"

#Добавляем все новое и забытое старое в индекс для коммита
echo "git add"
/usr/bin/git --git-dir=$FOLDER/.git --work-tree=$FOLDER add .

#Коммитим в репозиторий (в тот, в котором собственно работаем)
echo "commiting"
/usr/bin/git --git-dir=$FOLDER/.git --work-tree=$FOLDER commit -am "-"

#Мерджим это все в центральную репу
echo "pushing"
/usr/bin/git --git-dir=$FOLDER/.git --work-tree=$FOLDER push $REP master

Этот скрипт запускается раз в час. Идея такая, что Меньше чем за час я вряд ли успею написать мног кода или еще как напакостить в проектах.
Если вдруг что-то потерялось (например я писал кусок кода, потом стер, а через месяц код понадобился и надо его найти), обычно примерно знаешь что надо, поэтому я написал маленький скрипт, который ищет по ревизиям (а прелесть гита в том, что он всю историю, в отличии от svn хранит локально).

#!/bin/bash
echo 'Start'
#Получаем список ревизий (хеш и слово коммит)
LOGS=`git log | grep -E '[0-9a-zA-Z]{40}'`

for LOG in $LOGS ;
do
if [ "commit" != $LOG ];
then
#чекаутим коммит во временную ветку
git checkout -b searching$LOG $LOG
#ищем в этой ветке
MATCH=`git grep $1`
#цветасто выводим, если нашли чо
echo -e "\033[01;32m$MATCH\033[00m"

git checkout master
#удаляем ветку
git branch -d searching$LOG
fi
done;

Так я нахожу ревизию, в которой есть нужная мне строка (может, есть способ попроще? blame вроде так не умеет, он смотрит только на существующие).

Иногда (когда мозг порушен и идеи кривые и костыльные) когда, нужно поработать вне repository, например надо сделать ветку с нормальными коммитами с комментариями и все такое, я клонирую рабочий репозиторий (repository), работаю с ним и после делаю pull в (на самом деле из) repository/
и при ледующей синхронизации с центральным, все мои изменения заливаются туда, все чудесно и замечательно.

мысль, позитив, git, рабочее

Previous post Next post
Up