Para comparar uma pasta de projeto no seu Mac com uma cópia num servidor acessível por SSH, utilize rsync no modo de simulação (dry-run). Este comando permite listar quais os ficheiros que parecem dessincronizados sem os transferir ou alterar. Para diferenças de texto dentro de um ficheiro, utilize diff após trazer ambas as versões para o Mac. Este guia foca-se na comparação de um diretório de projeto local com um diretório remoto; não assume que as duas cópias estejam sincronizadas nem indica qual das versões deve prevalecer.
Verifique primeiro a ligação e os caminhos
Abra o Terminal no seu Mac. A Apple documenta o SSH como um dos protocolos que o Terminal pode utilizar para se ligar a servidores remotos; com o cliente de linha de comandos ssh, também pode executar um comando na máquina remota. Precisará de um nome de servidor, uma conta remota, acesso ao diretório do projeto e uma autenticação SSH funcional. O guia do Terminal da Apple e o manual do ssh da OpenBSD descrevem estas opções de ligação.
Substitua a conta, o anfitrião e os nomes de pastas de exemplo abaixo pelos seus próprios dados. A máquina remota deve ter o rsync instalado e disponível para a sua conta. rsync --version mostra a versão local; uma versão remota pode ser verificada com ssh user@host rsync --version.
ssh user@server.example.com
Se esse início de sessão falhar, resolva o problema de anfitrião, autenticação, rede ou acesso antes de comparar ficheiros. Em seguida, identifique ambos os diretórios do projeto com precisão. Nos exemplos, /Users/you/Projects/site é local e /srv/projects/site é remoto. Mantenha a barra final em cada caminho de diretório para comparar o conteúdo dos diretórios na mesma estrutura relativa. Utilize aspas em caminhos que contenham espaços.
Pré-visualizar quais os ficheiros que diferem
Execute este comando a partir do seu Mac:
rsync -rnic --out-format='%i %n' \
user@server.example.com:/srv/projects/site/ \
/Users/you/Projects/site/
O caminho remoto é a origem e o caminho do Mac é o destino. O comando utiliza recursão (-r), saída detalhada por item (-i), comparação por checksum (-c) e o modo de simulação dry-run (-n). A documentação do rsync indica que as simulações não fazem alterações; o relatório detalhado por itens fornece uma lista concisa das atualizações propostas. Nesta direção, um item listado significa que a origem remota difere de, ou está em falta no, destino local. O manual do rsync documenta simulações (dry runs), alterações detalhadas por item e comparação por checksum.
O modo checksum lê os dados dos ficheiros em ambos os lados para comparar o conteúdo, pelo que pode demorar mais tempo e utilizar mais I/O de disco do que a verificação rápida padrão do rsync, que se baseia no tamanho do ficheiro e na data de modificação. Utilize -nic quando o conteúdo for importante, mesmo que as datas ou tamanhos possam não revelar uma alteração. Para uma passagem preliminar mais rápida, utilize -rin; esta opção reporta as alterações detetadas pela verificação rápida do rsync e pode não detetar alterações de conteúdo quando tanto o tamanho como a data de modificação coincidem. A pré-visualização não apresenta as linhas alteradas dentro dos ficheiros.
Inverta os dois caminhos se a cópia do Mac dever ser tratada como a origem e a cópia remota como o destino. A direção é importante: os marcadores detalhados do rsync refletem o que seria atualizado no destino. Mantenha -n enquanto inspeciona os resultados. Remova-o apenas se decidir deliberadamente realizar uma transferência; o rsync é uma ferramenta de cópia, não uma intercalação bidirecional (two-way merge).
Ler o conteúdo de uma diferença num ficheiro de texto
Para inspecionar as alterações reais linha a linha, compare dois ficheiros locais com diff -u. Primeiro, copie uma versão para um local temporário separado utilizando o seu método de transferência aprovado habitual, ou utilize uma cópia do projeto que já tenha localmente. De seguida, execute:
diff -u \
"/Users/you/Projects/site/config/settings.yml" \
"/Users/you/Desktop/settings-remote.yml"
O formato unificado (unified output) coloca o contexto próximo ao redor das linhas alteradas. As linhas com o prefixo - pertencem ao primeiro ficheiro; as linhas com o prefixo + pertencem ao segundo. O diff é uma comparação de conteúdo, pelo que não irá transferir nem intercalar edições. Para uma árvore de diretórios local inteira, diff -ru local-folder remote-folder compara os ficheiros correspondentes recursivamente, mas a pasta remota deve estar montada ou disponível de outra forma como um caminho local. O manual do GNU Diffutils explica a comparação recursiva de diretórios e o formato unificado; as opções de comando do macOS podem variar, pelo que deve consultar man diff no seu Mac caso alguma opção seja rejeitada. Manual do GNU Diffutils.
Compreender os limites antes de agir
Uma pré-visualização do rsync limpa significa que não foram detetadas diferenças utilizando as regras de comparação e os caminhos selecionados. Não apresenta uma revisão lado a lado, não resolve edições em conflito nem garante que todas as propriedades do sistema de ficheiros sejam equivalentes. A opção de checksum do rsync compara o conteúdo dos ficheiros, enquanto os metadados, tais como permissões e marcas temporais, dependem das opções que selecionar. Além disso, as árvores de ficheiros podem mudar após a pré-visualização se alguém editar qualquer uma das cópias.
Se o sistema remoto não fornecer acesso via SSH ou rsync, este fluxo de trabalho não funcionará como descrito. Utilize um método de acesso permitido por esse sistema, crie duas cópias locais acessíveis e compare-as com o diff ou outra ferramenta de comparação adequada. Não execute um comando de transferência em vez da pré-visualização, a menos que pretenda o seu comportamento de atualização da origem para o destino.
Fontes
Ligar a servidores no Terminal no Mac — Suporte Apple
ssh(1) — Páginas do manual OpenBSD — OpenBSD
Página de manual do rsync(1) — The Samba Project
Comparing and Merging Files — GNU Project