如何将编码项目存储在本地但将相关文档同步到 iCloud Drive?

如何将编码项目存储在本地但将相关文档同步到 iCloud Drive?

在使用 Windows 和 Android 近十年后,我最近使用 MacBook (MacOS Ventura) 和 iPhone 11 转入了 Apple 生态系统。我需要在计算机上保留许多 Git 存储库,经过一番研究后,我决定仅保留在 MacBook 本地,而不是 iCloud Drive 上。

那么问题是我想在 iCloud Drive 上同步与这些项目相关的文档 - 包括幻灯片、文本文件、文档、电子表格和图像 - 这些文档不是 Git 存储库的一部分,而是项目的一部分。我的第一个想法是对每个都使用 .nosync,但另一个问题是 iCloud 非常难以导航,因此理想情况下,我的整个“Computing”文件夹位于“~/Computing”。

我的第二个想法是存储我想要在 iCloud 上同步的内容,然后将其别名到 ~/Computing 文件夹,这就是我现在正在做的事情。但我希望有一个可以设置一次而无需“维护”的解决方案。

在将其他存储库同步到 iCloud 时,如何防止 Git 存储库同步?

答案1

在进一步思考这个问题之后,我意识到我可以编写一个 shell 脚本来自动为所有最低级别的目录建立符号链接,这样我就可以在本地目录中保持相同的结构,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 存储库一起使用时

相关内容