Se si ha accesso filesystem al o qualsiasi altro repository intatta remota che contiene questo oggetto, si dovrebbe essere in grado di andare lì ed eseguire:
git cat-file tree af9ed8 > 9ed8...
Si noti che questo richiede solo accesso in sola lettura ai il repository (puoi scrivere il file altrove) quindi dovrebbe essere molto sicuro, e potresti anche farlo come utente che non ha i permessi di scrittura sul filesystem. È quindi possibile trasferire/copiarlo nella posizione appropriata nel proprio repo:
cp path/to/9ed8... .git/objects/af/9ed8...
oggetti allentati sono memorizzati nella directory con le prime due cifre del hash; i nomi dei file sono il resto dell'hash.
Edit: Se l'oggetto è sciolto sul lato remoto si potrebbe anche solo copiare direttamente fuori .git/objects
, ma se è ricco, che avrebbe dovuto scompattarlo con git unpack-objects
, e immagino le packfiles in che repo sono enormemente proibitivo. Il modo migliore per farlo sarebbe quello di copiare il pacchetto nel repository danneggiato, eliminare eventuali oggetti danneggiati e quindi utilizzare git unpack-objects < packfile
, che non decomprimerà alcun oggetto già esistente.
non sono sicuro di come farlo tramite normali comandi remoti; anche il livello inferiore git fetch-pack
funziona ancora a un livello di riferimento, recuperando un pacchetto con i commit necessari per completare il ref. Sospetto che potresti essere in grado di fare qualcosa di nascosto come cancellare tutti gli oggetti commit che fanno riferimento a quell'albero (git fsck
potrebbe aiutarti a trovarli). Speravo davvero che potessi essere in grado di creare un tag che punta a quell'oggetto, spingerlo al telecomando, quindi provare a recuperare il tag dal telecomando (convincendolo a recuperare l'oggetto) ma sembra che Git stia abbastanza attento a non consente di creare o manipolare un tag che punta a un oggetto inesistente.
So che questo non risponde alla tua domanda, ma si potrebbe considerare suggerendo frazionamento che repo! Se è così grande ora, sarà solo più grande, e wow, ci vorrà molto tempo per clonare. – Cascabel
Cosa succede se si esegue 'git fetch origin'? Cerca di recuperare troppi oggetti? – Cascabel
@Jefromi Questo è praticamente non classificabile ^^. La procedura è solo copiando in modo crudo il repository. Mi piacerebbe farlo dividere, ma sarebbe un lavoro incredibile, paralizzando la squadra per tutto il tempo e non è quello che faranno i responsabili. Non sono responsabile per questo (sono un po 'nuovo ...). Sono abituati a farcela: sospiro: ... –