Как я могу хранить проекты по программированию локально, но синхронизировать связанные документы с iCloud Drive?

Вопрос или проблема

У меня есть много репозиториев Git, которые мне нужно сохранить на моем компьютере, и после некоторых исследований я решил, что они останутся только локально на MacBook, а не на iCloud Drive.

Проблема в том, что я хочу синхронизировать документы, связанные с этими проектами – включая слайды, текстовые файлы, документы, таблицы и изображения – которые не являются частью репозитория Git, но являются частью проектов, на iCloud Drive. Моя первая мысль заключалась в том, чтобы использовать .nosync для каждого из них, но другая проблема заключается в том, что iCloud известен своей сложностью навигации, поэтому в идеале моя вся папка “Computing” находится по пути “~/Computing”.

Моя вторая мысль заключалась в том, чтобы сохранить то, что я хочу синхронизировать на iCloud, а затем создать алиас для папки ~/Computing, и это то, что я делаю сейчас. Но я бы хотел решить, которое я могу настроить один раз и никогда не придется “поддерживать”.

Как мне предотвратить синхронизацию репозиториев Git, синхронизируя остальные с iCloud?

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

#!/bin/bash

icloud_dev_dir="$HOME/Library/Mobile Documents/com~apple~CloudDocs/dev"
personal_dev_dir="$HOME/Computing"

# Функция для создания алиасов для файлов в директории
create_aliases_for_files() {
    local source_dir=$1
    local target_dir=$2

    find "$source_dir" -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file; do
        local file_name=$(basename "$file")
        ln -s "$file" "$target_dir/$file_name"
        sleep 1
        echo "Создан алиас: $file -> $target_dir/$file_name"
    done
}

# Функция для создания алиасов для нижнеуровневых директорий
create_aliases_for_directories() {
    local path=$1
    local base_dir=$2

    local relative_path=${path#"$icloud_dev_dir"}
    local target_dir="$base_dir$relative_path"

    if [[ "$path" != "$icloud_dev_dir" ]]; then
        if [[ "$path" -ef "$target_dir" ]]; then
            echo "Пропуск самореферентной символьной ссылки: $path"
        elif [[ -z "$(find "$path" -mindepth 1 -type d)" ]]; then
            ln -s "$path" "$target_dir"
            sleep 1
            echo "Создан алиас: $path -> $target_dir"
        else
            mkdir -p "$target_dir"
            create_aliases_for_files "$path" "$target_dir"
            sleep 1
            echo "Создана директория: $target_dir"
        fi
    fi
}

# Создать алиасы для нижнеуровневых директорий
find "$icloud_dev_dir" -type d -print0 | while IFS= read -r -d '' directory; do
    create_aliases_for_directories "$directory" "$personal_dev_dir"
done

Теперь мне просто нужно убедиться, что я добавляю файлы и папки в iCloud Drive, а затем я запускаю скрипт снова только когда мне нужно использовать его с репозиторием git.

Ответ или решение

Как хранить кодовые проекты локально и синхронизировать связанные документы с iCloud Drive?

Работа с кодовыми проектами часто требует четкой организации файловой структуры и эффективного управления данными. Если вы используете Git для контроля версий, но хотите, чтобы связанные документы автоматически синхронизировались с iCloud Drive, есть несколько стратегий, которые можно использовать. Данная статья предложит вам детализированное решение, которое минимизирует необходимость в постоянном обслуживании и подойдет для долговременного использования.

1. Локальное хранение репозиториев Git

Ваша основная задача – сохранить Git-репозитории локально на вашем MacBook и исключить их из синхронизации с iCloud Drive. Для этого первым делом следует убедиться, что все репозитории располагаются в отдельной папке, например, в ~/Computing/repositories. В таком случае можно избежать случайной синхронизации файлов, относящихся к проектам, поскольку iCloud Drive не будет подключен к этой директории.

2. Структура для документов на iCloud Drive

Для всех документов, которые хотите синхронизировать с iCloud Drive – текстовых файлов, слайдов, таблиц и изображений – рекомендуется создать отдельную папку в вашем iCloud Drive, например, ~/Library/Mobile Documents/com~apple~CloudDocs/dev. Все документы, которые не являются кодом, будут храниться здесь, что упростит их синхронизацию.

3. Автоматизация с помощью символических ссылок

Чтобы упростить процесс, вы можете использовать символические ссылки (symlink). Это позволит вам иметь доступ к вашим документам из локальной папки ~/Computing, не дублируя их в разных местах. Ваша идея использовать сценарий на Bash для создания символических ссылок является отличным решением. Ниже представлена переписка вашего кода с небольшими улучшениями и объяснениями:

#!/bin/bash

# Директории для хранения данных
icloud_dev_dir="$HOME/Library/Mobile Documents/com~apple~CloudDocs/dev"
personal_dev_dir="$HOME/Computing"

# Функция для создания символических ссылок для файлов
create_aliases_for_files() {
    local source_dir=$1
    local target_dir=$2

    find "$source_dir" -maxdepth 1 -type f -print0 | while IFS= read -r -d '' file; do
        local file_name=$(basename "$file")
        ln -s "$file" "$target_dir/$file_name"
        sleep 1
        echo "Создана ссылка: $file -> $target_dir/$file_name"
    done
}

# Функция для создания символических ссылок для каталогов
create_aliases_for_directories() {
    local path=$1
    local base_dir=$2

    local relative_path=${path#"$icloud_dev_dir"}
    local target_dir="$base_dir$relative_path"

    if [[ "$path" != "$icloud_dev_dir" ]]; then
        if [[ -z "$(find "$path" -mindepth 1 -type d)" ]]; then
            ln -s "$path" "$target_dir"
            sleep 1
            echo "Создана ссылка: $path -> $target_dir"
        else
            mkdir -p "$target_dir"
            create_aliases_for_files "$path" "$target_dir"
            sleep 1
            echo "Создан каталог: $target_dir"
        fi
    fi
}

# Создание символических ссылок для каталогов
find "$icloud_dev_dir" -type d -print0 | while IFS= read -r -d '' directory; do
    create_aliases_for_directories "$directory" "$personal_dev_dir"
done

4. Использование скрипта

Теперь ваш сценарий будет автоматически создавать ссылки для всех файлов и директорий из указанной папки iCloud Drive в вашей локальной директории. Запускайте этот скрипт по мере необходимости, например, когда вы добавляете новые файлы на iCloud Drive. Это сэкономит ваше время и минимизирует риск потери данных.

Заключение

Такой подход позволит вам удобно хранить кодовые проекты локально, одновременно синхронизируя важные документы в облаке. Это решение обеспечивает порядок, эффективность и минимальные затраты времени на постоянное управление файлами. Вы сможете сосредоточиться на разработке, зная, что все необходимые материалы находятся на своих местах и доступны в любой момент.

Оцените материал
Добавить комментарий

Капча загружается...