Windows와 Android를 거의 10년 동안 사용한 후, 최근에는 MacBook(MacOS Ventura)과 iPhone 11을 사용하여 Apple 생태계로 전환했습니다. 내 컴퓨터에 여러 Git 리포지토리를 유지해야 하는데 몇 가지 조사 후에 iCloud Drive가 아닌 MacBook에 로컬로 유지하기로 결정했습니다.
문제는 Git 저장소의 일부가 아니라 프로젝트의 일부인 슬라이드, 텍스트 파일, 문서, 스프레드시트 및 이미지를 포함하여 이러한 프로젝트와 관련된 문서를 iCloud Drive에서 동기화하고 싶다는 것입니다. 내 첫 번째 생각은 각각에 대해 .nosync를 사용하는 것이었지만 또 다른 문제는 iCloud가 탐색하기 매우 어렵다는 것입니다. 따라서 이상적으로는 전체 "Computing" 폴더가 "~/Computing"에 있어야 합니다.
두 번째 생각은 동기화하고 싶은 항목을 iCloud에 저장한 다음 ~/Computing 폴더에 별칭을 지정하는 것이었습니다. 이것이 제가 지금 하고 있는 작업입니다. 하지만 저는 한 번만 설정할 수 있고 "유지 관리"가 필요하지 않은 솔루션을 원합니다.
다른 저장소를 iCloud에 동기화할 때 Git 저장소가 동기화되지 않도록 하려면 어떻게 해야 합니까?
답변1
이에 대해 더 깊이 생각한 후에 나는 모든 최하위 디렉터리에 자동으로 심볼릭 링크를 만드는 쉘 스크립트를 작성하여 로컬 디렉터리인 cd에 동일한 구조를 유지하면서도 git 저장소를 추가할 수 있다는 것을 깨달았습니다.
#!/bin/bash
icloud_dev_dir="$HOME/Library/Mobile Documents/com~apple~CloudDocs/dev"
personal_dev_dir="$HOME/Computing"
# Function to create aliases for files within a directory
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 "Created alias: $file -> $target_dir/$file_name"
done
}
# Function to create aliases for lowest-level directories
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 "Skipping self-referential symlink: $path"
elif [[ -z "$(find "$path" -mindepth 1 -type d)" ]]; then
ln -s "$path" "$target_dir"
sleep 1
echo "Created alias: $path -> $target_dir"
else
mkdir -p "$target_dir"
create_aliases_for_files "$path" "$target_dir"
sleep 1
echo "Created directory: $target_dir"
fi
fi
}
# Create aliases for lowest-level directories
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 저장소와 함께 사용해야 하는 경우에만.