# Организация проектов с помощью gclone


Ранее у меня все проекты хранились в одной директории. То есть я создавал в домашней директории нечто вроде
`Projects` и затем все что делал сам, или находил на просторах интернета, размещал на одном уровне в этой директории.

Спутся время разобраться во всем этом было проблематично. И не так давно я выработал определенный принцип организации
проектов на жестком диске.

Как и раньше, я создаю одну директорию для хранения исходных кодов интересующих проектов. Но затем я провожу
клонирование в поддридектории в зависимости от их источника. К примеру `https://github.com/juev/juev.org` размещаю в
директории `~/src/github.com/juev/juev.org`. Теперь организация стала понятной и даже спустя время исходя из
местоположения проекта понятно, где он размещается в интернете. Так же понятно, что относиться к моим проектам,
а что взято из интереса.

Но каждый раз создавать весь путь вручную надоедает, отнимает время. И для того, чтобы упростить этот процесс, я
создал проект [gclone](https://github.com/juev/gclone). Установить можно с помощью go:

```bash
go install github.com/juev/gclone@latest
```

либо взять бинарник со страницы [релизов](https://github.com/juev/gclone/releases). Теперь необходимо определить
переменную окружения `GIT_PROJECT_DIR`, которая будет указывать на директорию, куда будет проводиться клонирование.
Например:

```bash
GIT_PROJECT_DIR="~/src" gclone https://github.com/juev/gclone.git 
```

Команда создаст директорию `~/src/github.com/juev/gclone`, в которую будет склонирован проект. Для fish я определил
две функции, которые дополнительно упрощают работу с исходным кодом:

```fish
function gcd --argument repo
    if test "$argv[1]" = ""
        echo "argument is empty"
        return
    end
    cd $(gclone $argv[1])
end
```

```fish
function gcode --argument repo
    if test "$argv[1]" = ""
        echo "argument is empty"
        return
    end
    code $(gclone $argv[1])
end
```

первая команда `gcd`, которая проводит клонирование репозитория в новую директорию, и затем меняет текущую директорию
на директорию проекта. И вторая команда `gcode`, которая так же создает директории, проводит клонирование и затем
открывает эту директорию в vscode.

Вроде минимальные изменения, но значительно упростили жизнь. Часто использую созданные команды в своем воркфлоу.

Надеюсь проект окажется полезным и для вас. Если будут вопросы или замечания, создавайте
[issue](https://github.com/juev/gclone/issues/new).

