Вопрос или проблема
У меня есть много репозиториев 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. Это сэкономит ваше время и минимизирует риск потери данных.
Заключение
Такой подход позволит вам удобно хранить кодовые проекты локально, одновременно синхронизируя важные документы в облаке. Это решение обеспечивает порядок, эффективность и минимальные затраты времени на постоянное управление файлами. Вы сможете сосредоточиться на разработке, зная, что все необходимые материалы находятся на своих местах и доступны в любой момент.