2012-06-06 13 views
6

Niedawno zastąpił autor, committer i ich emaile we wszystkich moich lokalnych zatwierdzeń, stosując następujące polecenie:„git filter-branch” z powodzeniem stosowany do zmiany committer/autor, ale zmiany nie odzwierciedlają na github

git filter-branch -f --env-filter ' 
if [ "$GIT_COMMITTER_NAME" = "oldname" ]; 
then 
    GIT_COMMITTER_NAME="newname"; 
    GIT_COMMITTER_EMAIL="newaddr"; 
    GIT_AUTHOR_NAME="newname"; 
    GIT_AUTHOR_EMAIL="newaddr"; 
fi 

if [ "$GIT_AUTHOR_NAME" = "oldname" ]; 
then 
    GIT_COMMITTER_NAME="newname"; 
    GIT_COMMITTER_EMAIL="newaddr"; 
    GIT_AUTHOR_NAME="newname"; 
    GIT_AUTHOR_EMAIL="newaddr"; 
fi 
' -- --all 

Aktualizacje są natychmiast widoczne lokalnie (np. W moim środowisku SourceTree). Jednak po siłę pchania zmodyfikowany repozytorium GitHub ...

git push -f origin master 

... dwa poszczególne pozycje uparcie odmawiają mają committer i autor aktualizacja: plik Gemfile.lock i katalog Widoki.

Należy również pamiętać, że:

  1. Jest to drugi raz, jestem wykonywania tego rodzaju pracy na tym repozytorium. Uważam, że nie spotkałem się z takimi problemami za pierwszym razem.

  2. wyszukiwania dla mojej starej nazwy w repozytorium ...

    $ find . "<oldname"> 
    

... ma uzyskując kilka wyników, co oznacza, że ​​oldname wciąż czai się w wielu repozytorium plików - w tym pliki które pojawiają się zarówno w GitHub, jak i lokalnie.

Moje pytanie, a następnie: Jak mogę zmienić autora/autora dwóch "upartych" plików na GitHub?

+1

Być może GitHub buforuje te informacje? Czy pchnięcie repo do nowej gałęzi lub nowego repo powoduje ten sam problem? –

+1

Co masz na myśli, mówiąc, że Gemfile.lock i Widoki "odmawiają zaktualizowania swojego autora i autora"? Tylko commits mają autora i autora, a nie drzewa i bloby. Również gałąź filtru, którą uruchomiłeś, nie zrobiłaby nic na temat plików o nazwie "oldname". Ponadto może pomóc opublikować adres URL Github. –

+0

Powiązane: [Jak zmienić autora zatwierdzenia w git?] (Http://stackoverflow.com/q/750172/456814). –

Odpowiedz

4

Po użyciu git filter-branch, git nadal zachowuje kopię zapasową historii repo w refs/original. Jest tak, że jeśli coś zepsuć w gałęzi filtra, możesz w razie potrzeby powrócić. Gdy jesteś pewien, że wszystko poszło gładko, można usunąć z kopii zapasowej ref:

git update-ref -d refs/original/refs/heads/master 

Z jakiegoś powodu, to nadal trwa dodatkowy popełnić na github, aby odzwierciedlić tę zmianę. Dodam spację lub coś do readme, commit i push ... po tym github odzwierciedla właściwych autorów na stronie projektu.

0

Jakiego dokładnego widoku na GitHub używasz do określenia autora linii? Prawdopodobnie jest albo buforowany, albo przeglądasz coś konkretnego dla starego zatwierdzenia SHA1.

Możesz przetestować, czy zadziałało, wykonując świeży klon repozytu i sprawdzając te dwa pliki pod kątem git blame filename. Jeśli to pokazuje właściwego autora, to zadziałało.

Powiązane problemy