--Skip-worktree'den sonra dal değiştirilemez

YAPMAK İSTEDİĞİM ŞEY

Hassas veriler içeren bir dosya var, bu yüzden bu dosyanın içeriğini uzak sunucuya iletmek istemiyorum.

BEN NE YAPTIM?

Bunu başarmak için, dosya boş olduğunda bir taahhütte bulundum ve bu boş dosyayı sunucuya (GitHub) itti. Ardından dosyayı hassas verilerle doldurun ve git update-index --skip-worktree path/to/file uygulayın. Ama hiçbir taahhütte bulunmadım.

Şimdi şubemi değiştirmeye çalışıyorum ancak bu hatayı alıyorum:

    error: Your local changes to the following files would be overwritten by checkout:
    path/to/file
    Please, commit your changes or stash them before you can switch branches.
    Aborting

Niçin skip-worktree INSTEAD OF değişmez varsayımla KULLANIM?

Bu konuyla ilgili birkaç SO soru okudum ve bulundu Borealid'in cevabı .

- değiştirmeden önce, bir geliştiricinin bir dosyayı değiştirmemesi gerektiğini varsayar. Bu bayrak, SDK'ler gibi değişmeyen klasörlerin performansını artırmak içindir.

     

--skip-worktree, git'e, belirli bir dosyaya dokunmama talimatını verdiğinizde faydalıdır, çünkü geliştiricilerin dosyayı değiştirmesi gerekir. Örneğin, ana havuz yukarı akış bazı üretime hazır yapılandırma dosyalarını barındırıyorsa ve bu dosyalarda yanlışlıkla değişiklik yapmak istemiyorsanız, - skip-worktree tam olarak istediğiniz şeydir.

Bundan sonra, Jeff'in sorusunu ve . Jeff'in sorunu benimkiyle neredeyse aynı, ve ben VonC'nin çözümünü takip ettim. Ancak bu benim için işe yaramaz. Belki git sürümü farkı nedeniyle. Çünkü 2012'den itibaren bu soru. VonC ile konuştuk ve cevabı hatırlayamadığı için bunu yeni bir soru olarak sormasını söyledi.

Birlikte --sume-değiştirilmemiş ve --skip-worktree ve yazılımdan sıfırlanan worktree kullanmaya çalıştım. Fakat hiçbir şey değişmedi.

YANİ?

Sorunum hakkında bana yardım edebilir misin?

Teşekkür ederim.

27
Sorunu tekrarlamaya çalıştım ama bu benim için işe yaradı. Özel dosyamın şubelerim arasında farklı olmasının tek yolu çoğaltmamdı. yol/dosya/dosya öğesinin şubelerinizle tamamen aynı olup olmadığını iki kere kontrol ettiniz mi? git diff branch1..branch2 - path/to/file yapın.
katma yazar Justin Howard, kaynak
@Eray Justin haklı. Söz konusu dosyanın (-skip-worktree öncesi) şubelerinizde aynı olduğundan emin olmalısınız.
katma yazar Hải Nguyễn, kaynak
@Eray Justin haklı. Söz konusu dosyanın (-skip-worktree öncesi) şubelerinizde aynı olduğundan emin olmalısınız.
katma yazar Hải Nguyễn, kaynak

10 cevap

Buna düzgün bir çözüm bulamadım, bu yüzden etkilenen dosyalarda --no-skip-worktree kodunu çalıştırmak için bir .bat dosyası kullanıyorum . Sonra stash , şubeyi değiştir, stash Uygula 'yı ve sonra --skip-worktree .bat dosyası kullandım. kod> aynı dosyalar üzerinde.

Güzel değil, ama şu ana kadar bulduğum en basit ve en hızlı yol.

3
katma
.Bat dosyanızı paylaşır mısınız?
katma yazar Woland, kaynak
@Woland Korkarım artık bunun bir kopyası yok, ama doğru hatırlıyorsam, her dosya için yalnızca --no-skip-worktree içeren bir tane ve bir tane daha var. --skip-worktree aynı dosyalar için.
katma yazar stevospinks, kaynak

Buna düzgün bir çözüm bulamadım, bu yüzden etkilenen dosyalarda --no-skip-worktree kodunu çalıştırmak için bir .bat dosyası kullanıyorum . Sonra stash , şubeyi değiştir, stash Uygula 'yı ve sonra --skip-worktree .bat dosyası kullandım. kod> aynı dosyalar üzerinde.

Güzel değil, ama şu ana kadar bulduğum en basit ve en hızlı yol.

3
katma
.Bat dosyanızı paylaşır mısınız?
katma yazar Woland, kaynak
@Woland Korkarım artık bunun bir kopyası yok, ama doğru hatırlıyorsam, her dosya için yalnızca --no-skip-worktree içeren bir tane ve bir tane daha var. --skip-worktree aynı dosyalar için.
katma yazar stevospinks, kaynak

Bu dosyanın boş bir türevinin teslim edilmesinin bir nedeni var mı? Değilse

git rm --cached path/to/file
echo 'path/to/file' >> .gitignore
git commit -m'stop tracking path/to/file'

Sorunu çözebilir. (Dosyaya sahip olan her dal için tekrarlanmanız gerekir. Ya da tarihin yeniden yazılmasının sakıncası yoksa, önceki komisyonlarda da ondan kurtulmak için git filter branch kullanın.)

2
katma
Boş dosya türünü ittim, aksi halde bu sensitivefile.php 'ı içeren diğer dosyalar var ve bu dosyalar bulunamadı> hatası veriyor. Öyleyse bir sensitivedata.php dosyası olmalı, boş veya önemli değil.
katma yazar Eray, kaynak
Sadece dosyayı derleme işleminizin bir parçası olarak oluşturmayı düşündünüz mü? Ortak bir düzen, projeyi bazı IDE'de kullanmadan önce ve tam yapımdan önce çalıştırması beklenen bir ./configure betiğine sahip olmaktır. Bir dosyadaki sadece touch kadar zararsız ve (hesaplama açısından) ucuz olduğu sürece, bu betiği bir ödeme sonrası kanca .
katma yazar das-g, kaynak

Bu dosyanın boş bir türevinin teslim edilmesinin bir nedeni var mı? Değilse

git rm --cached path/to/file
echo 'path/to/file' >> .gitignore
git commit -m'stop tracking path/to/file'

Sorunu çözebilir. (Dosyaya sahip olan her dal için tekrarlanmanız gerekir. Ya da tarihin yeniden yazılmasının sakıncası yoksa, önceki komisyonlarda da ondan kurtulmak için git filter branch kullanın.)

2
katma
Boş dosya türünü ittim, aksi halde bu sensitivefile.php 'ı içeren diğer dosyalar var ve bu dosyalar bulunamadı> hatası veriyor. Öyleyse bir sensitivedata.php dosyası olmalı, boş veya önemli değil.
katma yazar Eray, kaynak
Sadece dosyayı derleme işleminizin bir parçası olarak oluşturmayı düşündünüz mü? Ortak bir düzen, projeyi bazı IDE'de kullanmadan önce ve tam yapımdan önce çalıştırması beklenen bir ./configure betiğine sahip olmaktır. Bir dosyadaki sadece touch kadar zararsız ve (hesaplama açısından) ucuz olduğu sürece, bu betiği bir ödeme sonrası kanca .
katma yazar das-g, kaynak

Skip-worktree bayrağını ekleyerek birlikte seyrek ödemeyi etkinleştirebilir ve dosyayı oraya ekleyebilirsiniz . muhtemelen silinecek).

Bir dosyayı dışlamak için seyrek kullanıma alma dosyasına koymanız gerekir (bkz. git-read- ağaç kılavuzu):

/*
!unwanted

Ardından güncellemede dokunulmayacak (bu nedenle, düzenlemelerinizi korumak yerine oradaki diğer şubenin içeriğini alamazsınız ). İstediğin gibi olmayabilir.

1
katma

Skip-worktree bayrağını ekleyerek birlikte seyrek ödemeyi etkinleştirebilir ve dosyayı oraya ekleyebilirsiniz . muhtemelen silinecek).

Bir dosyayı dışlamak için seyrek kullanıma alma dosyasına koymanız gerekir (bkz. git-read- ağaç kılavuzu):

/*
!unwanted

Ardından güncellemede dokunulmayacak (bu nedenle, düzenlemelerinizi korumak yerine oradaki diğer şubenin içeriğini alamazsınız ). İstediğin gibi olmayabilir.

1
katma

Ben de aynı problemi aldım ve üzerinde değişiklik yapmak istediğim dosyadaki gelen değişikliklerden dolayı kesilmek zorunda kaldım.

Yani eğer sadece dosya üzerinde hiçbir varsayım-değişiklik yapmazsam, sakla, en son sürüme bak, çetemi aç ve tekrar değiştir.

Şimdi tekrar şubeleri değiştirebiliyorum.

1
katma

Ben de aynı problemi aldım ve üzerinde değişiklik yapmak istediğim dosyadaki gelen değişikliklerden dolayı kesilmek zorunda kaldım.

Yani eğer sadece dosya üzerinde hiçbir varsayım-değişiklik yapmazsam, sakla, en son sürüme bak, çetemi aç ve tekrar değiştir.

Şimdi tekrar şubeleri değiştirebiliyorum.

1
katma

Şimdiye kadar, - sayısız-değişmemiş ve - atlama-çalışma testi, bulduğum gibi çalışmıyor. Git sürümüm: git sürüm 2.8.4 (Apple Git-73) Stash, şu ana kadar çalışan tek yol.

0
katma

Şimdiye kadar, - sayısız-değişmemiş ve - atlama-çalışma testi, bulduğum gibi çalışmıyor. Git sürümüm: git sürüm 2.8.4 (Apple Git-73) Stash, şu ana kadar çalışan tek yol.

0
katma