코딩 프로젝트를 로컬에 저장하고 관련 문서를 iCloud Drive에 동기화하는 방법은 무엇입니까?

코딩 프로젝트를 로컬에 저장하고 관련 문서를 iCloud Drive에 동기화하는 방법은 무엇입니까?

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 저장소와 함께 사용해야 하는 경우에만.

관련 정보