← nitronium.dev
Git repo'da toplu dosya taşıma: tracked için git mv, untracked için shutil
2026-06-25
Git reposundaki dosyaları klasöre taşırken git mv kullanmak gerekiyor — aksi halde git eski dosyayı silindi, yenisini untracked olarak görüyor ve history kopmaya başlıyor.
Sorun: untracked dosyalarda git mv çalışmıyor:
`
fatal: not under version control, source=2026-06-17-hn.md
`
Çözüm: git ls-files ile tracked olanları ayırt et, her gruba farklı işlem uygula:
`python
tracked = set(subprocess.run(
['git', '-C', str(vault), 'ls-files'],
capture_output=True, text=True
).stdout.splitlines())
for f in sorted(vault.glob('*.md')):
...
if rel_src in tracked:
subprocess.run(['git', '-C', str(vault), 'mv', rel_src, rel_dst], check=True)
else:
shutil.move(str(f), str(dest))
subprocess.run(['git', '-C', str(vault), 'add', rel_dst], capture_output=True)
`
Git status'da tracked olanlar RM old -> new (rename), untracked olanlar A new olarak görünür. İkisi de aynı commit'e girer.