Git deposuna nas─▒l bo┼č bir dizin ekleyebilirim?


Al─▒nan cevaba git


Git deposuna bo┼č bir dizin (dosya i├žermeyen) nas─▒l ekleyebilirim?


3996









Cevap say─▒s─▒n─▒ say: 30






Bir dizini (neredeyse) bo┼č b─▒rakman─▒n ba┼čka bir yolu (depoda) .gitignore bu dizinin i├žinde bu d├Ârt sat─▒r─▒ i├žeren bir dosya olu┼čturmakt─▒r :

 # Ignore everything in this directory
*
# Except this file
!.gitignore
 

O zaman m104'├╝n ├ž├Âz├╝m├╝nde yapman─▒z gereken ┼čekilde emri alman─▒z gerekmez .

Bu, bir git durumu yapt─▒─č─▒n─▒zda, bu dizindeki dosyalar─▒n "izlenmeyen" olarak g├Âr├╝nmemesini de sa─člar.

@GreenAsJade adl─▒ kullan─▒c─▒n─▒n yorumuna kal─▒c─▒ yapma :

Bence, bu ├ž├Âz├╝m├╝n tam olarak soruyu istedi─či ┼čeyi yapt─▒─č─▒n─▒, ancak belki de bu soruya bakan pek ├žok insan─▒n arayaca─č─▒ bir ┼čey de─čil. Bu ├ž├Âz├╝m dizinin bo┼č kalmas─▒n─▒ garanti eder. "Ger├žekten burada dosyalar─▒ kontrol etmek istemiyorum" yaz─▒yor. "Burada teslim edilecek herhangi bir dosya yok, ancak buradaki dizine ihtiyac─▒m var, dosyalar daha sonra geliyor olabilir" ifadesinin aksine.


3861







Yapamazs─▒n Git SSS b├Âl├╝m├╝ne bak─▒n .

┼×u anda git indeksinin (evreleme alan─▒) tasar─▒m─▒ sadece dosyalar─▒n listelenmesine izin veriyor ve bo┼č dizinlerin de─či┼čtirilmesine izin verecek de─či┼čikli─či yapacak yetkin kimse bu durumu d├╝zeltecek kadar ├Ânemsemedi.

─░├žlerine dosya eklenirken dizinler otomatik olarak eklenir. Yani, dizinler asla depoya eklenmek zorunda de─čildir ve kendi ba┼člar─▒na takip edilmezler.

" git add <dir> " Diyebilirsiniz ve orada dosyalar eklenir.

├ľdeme s─▒ras─▒nda ger├žekten bir dizine ihtiyac─▒n─▒z varsa i├žinde bir dosya olu┼čturmal─▒s─▒n─▒z. .gitignore bu ama├ž i├žin iyi ├žal─▒┼č─▒yor; bo┼č b─▒rakabilir veya dizinde g├Âr├╝nmesini bekledi─činiz dosyalar─▒n adlar─▒n─▒ girebilirsiniz.


1053







Dizinde ad─▒ verilen bo┼č bir dosya olu┼čturun .gitkeep ve bunu ekleyin.


687







Bu README dosyas─▒n─▒ her zaman dizinde, bunun neden bu kadar bo┼č, dizinde depolanmas─▒n─▒ istedi─činin bir a├ž─▒klamas─▒yla birlikte koyabilirsiniz.


411







 touch .keep
 

Linux'ta bu, ad─▒nda bo┼č bir dosya olu┼čturur .keep . .gitkeep Birincisi Git'e agnostik oldu─ču i├žin bu isim tercih edilir , ikincisi Git'e ├Âzg├╝d├╝r. ─░kincisi, ba┼čka bir kullan─▒c─▒n─▒n belirtti─či gibi, .git ├Ânek kural─▒ Git'in kulland─▒─č─▒ dosya ve dizinler i├žin ayr─▒lmal─▒d─▒r.

Alternatif olarak, ba┼čka bir cevapta belirtildi─či gibi , dizin bunun yerine a├ž─▒klay─▒c─▒ README veya README.md dosya i├žerebilir .

Elbette bu, dosyan─▒n varl─▒─č─▒n─▒n uygulaman─▒z─▒n bozulmas─▒na neden olmamas─▒n─▒ gerektirir.


312







Neden bo┼č s├╝r├╝ml├╝ klas├Ârlere ihtiyac─▒m─▒z olsun?

─░lk ├Ânce ilk ┼čeyler:

Bo┼č bir dizin Git versiyonlama sisteminin alt─▒ndaki bir a─čac─▒n par├žas─▒ olamaz .

Sadece takip edilmeyecek. Ancak, bo┼č dizinlerin "s├╝r├╝mlendirilmesinin" anlaml─▒ olabilece─či senaryolar vard─▒r, ├Ârne─čin:

  • ├ľnceden tan─▒mlanm─▒┼č bir klas├Âr yap─▒s─▒n─▒n iskele kurulmas─▒, onu deponun her kullan─▒c─▒s─▒ / kat─▒l─▒mc─▒s─▒ i├žin uygun k─▒lmak; veya yukar─▒dakilerin ├Âzel bir ├Ârne─či olarak, klas├Âr├╝ veya i├žeri─čini sa─člamak istedi─čimiz ge├žici dizinler i├žin bir cache/ veya logs/ dizinler gibi bir klas├Âr olu┼čturmak .gitignore
  • Yukar─▒dakilerle ilgili olarak, baz─▒ projeler baz─▒ klas├Ârler olmadan ├žal─▒┼čmaz (genellikle k├Ât├╝ tasarlanm─▒┼č bir projenin ipucudur, ancak bu s─▒k s─▒k ger├žek d├╝nya senaryosudur ve belki de ele al─▒nmas─▒ gereken izin sorunlar─▒ olabilir).

Baz─▒ ├Ânerilen ge├žici ├ž├Âz├╝mler

Bir├žok kullan─▒c─▒ ┼čunlar─▒ ├Ânerir:

  1. README Dizini bo┼č b─▒rakmamak i├žin bir dosyay─▒ veya baz─▒ i├žeri─či olan ba┼čka bir dosyay─▒ yerle┼čtirmek veya
  2. .gitignore Sonunda, ayn─▒ ┼čekilde # 1 yakla┼č─▒m─▒na hizmet eden bir t├╝r "ters mant─▒k" (yani t├╝m dosyalar─▒ dahil etmek i├žin) ile bir dosya olu┼čturmak .

Her iki ├ž├Âz├╝m de kesinlikle i┼če yararken, onlar─▒ Git s├╝r├╝m├╝ne anlaml─▒ bir yakla┼č─▒mla tutars─▒z buluyorum.

  • Neden projenizde ger├žekten istemedi─činiz sahte dosyalar ya da README koyman─▒z gerekiyor?
  • Neden m├╝mk├╝n olsa bile ( dosyalar hari├ž ) ne anlama geldi─činin tam tersi olan .gitignore bir ┼čeyi ( dosyalar─▒ saklamak ) kullanmal─▒y─▒m ?

.gitkeep yakla┼č─▒m─▒

S├╝r├╝m olu┼čturma sistemindeki klas├Âr├╝n varl─▒─č─▒n─▒ zorlamak i├žin ├ža─čr─▒lan bo┼č bir dosya kullan─▒n .gitkeep .

Her ne kadar b├╝y├╝k bir fark olmasa da:

  • Klas├Âr├╝ tutmak i├žin tek amac─▒ olan bir dosya kullan─▒yorsunuz . Oraya koymak istemedi─čin herhangi bir bilgiyi koymazs─▒n.

    ├ľrne─čin, README'leri de, README'leri, klas├Âr tutmak i├žin bir mazeret olarak de─čil, faydal─▒ bilgilerle kullanmal─▒s─▒n─▒z.

    Kayg─▒lar─▒n ayr─▒lmas─▒ her zaman iyi bir ┼čeydir ve .gitignore istenmeyen dosyalar─▒ g├Ârmezden gelmek i├žin yine de ekleyebilirsiniz .

  • Adland─▒rma .gitkeep , dosya ad─▒n─▒n kendisinden (ve ayr─▒ca payla┼č─▒lan bir proje ve Git deposunun temel ama├žlar─▒ndan biri i├žin iyi olan di─čer geli┼čtiriciler i├žin) bu dosyan─▒n ├žok net ve anla┼č─▒l─▒r olmas─▒n─▒ sa─člar.

    • Kodla ilgili olmayan bir dosya (ba┼čtaki nokta ve ad nedeniyle)
    • Git ile a├ž─▒k├ža alakal─▒ bir dosya
    • Amac─▒ ( saklamak ) a├ž─▒k├ža ifade edilir ve tutarl─▒d─▒r ve anlams─▒zla┼čt─▒rmak anlam─▒nda anlaml─▒d─▒r.

Benimseme

Laravel , Angular-CLI .gitkeep gibi ├žok ├Ânemli ├žer├ževeler taraf─▒ndan benimsenen yakla┼č─▒m─▒ g├Ârd├╝m .https://laravel.com/https://github.com/angular/angular-cli


286







Di─čer cevaplarda a├ž─▒kland─▒─č─▒ gibi Git, haz─▒rlama alan─▒nda bo┼č dizinleri temsil edemez. ( Git SSS b├Âl├╝m├╝ne bak─▒n .) Ancak, bir dizin .gitignore yaln─▒zca bir dosya i├žeriyorsa, bir dizin yeterince .gitignore bo┼čsa, bo┼č dizinlerdeki dosyalar─▒ yaln─▒zca a┼ča─č─▒daki yollarla olu┼čturabilirsiniz:

 find . -type d -empty -exec touch {}/.gitignore \;
 

124


2011-05-03





Andy Lester hakl─▒, ancak dizininizin bo┼č olmas─▒ ve bo┼č olmamas─▒ gerekiyorsa .gitignore , oraya ge├žici bir ├ž├Âz├╝m olarak bo┼č bir dosya koyabilirsiniz .

Bir yana, bu temel bir Git depolama tasar─▒m─▒ sorunu de─čil, bir uygulama konusudur. Git posta listesinde bir├žok kez belirtildi─či gibi, bunun uygulanmamas─▒n─▒n nedeni, kimsenin bunun i├žin bir yama g├Ânderecek kadar ├Âzen g├Âstermemesi, yap─▒lmamas─▒ veya yap─▒lmamas─▒ gerekti─čidir.


65







Ruby on olu┼čturma yolunda klas├Âr log:

 mkdir log && touch log/.gitkeep && git add log/.gitkeep
 

┼×imdi log dizini a─čaca dahil edilecektir. Da─č─▒t─▒rken s├╝per kullan─▒┼čl─▒d─▒r, bu nedenle g├╝nl├╝k dizinleri olu┼čturmak i├žin bir rutin yazmak zorunda kalmazs─▒n─▒z.

Tomruklar yay─▒nlayarak saklanabilir,

 echo log/dev.log >> .gitignore
 

ama muhtemelen bunu biliyordun.


32







Git bo┼č dizinleri izlemiyor. Daha fazla a├ž─▒klama i├žin Git SSS b├Âl├╝m├╝ne bak─▒n . ├ľnerilen ge├žici ├ž├Âz├╝m, bir .gitignore dosyay─▒ bo┼č dizine koymakt─▒r . Bu ├ž├Âz├╝m├╝ sevmiyorum, ├ž├╝nk├╝ .gitignore Unix konvansiyonu taraf─▒ndan "gizli". Ayr─▒ca, dizinlerin neden bo┼č oldu─čuna dair bir a├ž─▒klama yok.

Bo┼č dizine, dizinin neden bo┼č oldu─čunu ve neden Git'in izlenmesi gerekti─čini a├ž─▒klayan bir README dosyas─▒ koyman─▒z─▒ ├Âneririm. README dosyas─▒ yerinde iken, Git s├Âz konusu oldu─čunda, dizin art─▒k bo┼č de─čil.

As─▒l soru, neden git i├žindeki bo┼č dizine ihtiyac─▒n─▒z var? Genellikle, derleme / ├žal─▒┼čt─▒rmadan ├Ânce bo┼č bir dizin olu┼čturabilecek bir t├╝r derleme beti─činiz vard─▒r. E─čer de─čilse o zaman bir tane yap─▒n. Bu, bo┼č dizinleri git i├žine koymaktan ├žok daha iyi bir ├ž├Âz├╝m.

Demek bo┼č bir dizine ihtiya├ž duyman─▒z i├žin bir nedeniniz var. Bu nedeni README dosyas─▒na koyun. Bu ┼čekilde di─čer geli┼čtiriciler (ve gelecekteki) bo┼č dizinin neden orada olmas─▒ gerekti─čini biliyor. Ayr─▒ca, bo┼č dizini gerektiren sorun ├ž├Âz├╝ld├╝─č├╝nde bo┼č dizini kald─▒rabilece─činizi de bileceksiniz.


Her bo┼č dizini listelemek i├žin a┼ča─č─▒daki komutu kullan─▒n:

 find -name .git -prune -o -type d -empty -print
 

Her bo┼č dizinde yer tutucu README olu┼čturmak i├žin:

 find -name .git -prune -o -type d -empty -exec sh -c \
  "echo this directory needs to be empty because reasons > {}/README.emptydir" \;
 

README dosyas─▒ d─▒┼č─▒ndaki dizindeki her ┼čeyi yoksaymak i├žin, i├žine a┼ča─č─▒daki sat─▒rlar─▒ koyun .gitignore :

 path/to/emptydir/*
!path/to/emptydir/README.emptydir
path/to/otheremptydir/*
!path/to/otheremptydir/README.emptydir
 

Alternatif olarak, her README dosyas─▒n─▒ yok say─▒lmaktan hari├ž tutabilirsiniz :

 path/to/emptydir/*
path/to/otheremptydir/*
!README.emptydir
 

Her README'yi zaten olu┼čturulduktan sonra listelemek i├žin:

 find -name README.emptydir
 

28







UYARI: Bu ince ayar, g├Âr├╝nd├╝─č├╝ gibi ger├žekten ├žal─▒┼čm─▒yor. Rahats─▒zl─▒ktan dolay─▒ ├Âz├╝r dileriz.

A┼ča─č─▒daki orijinal yay─▒n:

Git internals ile oynarken bir ├ž├Âz├╝m buldum!

  1. Farz edelim ki deponuzda.
  2. Bo┼č dizininizi olu┼čturun:

     $ mkdir path/to/empty-folder
     
  3. Tesisat komutunu ve bo┼č a─ča├ž SHA-1'i kullanarak dizine ekleyin :

     $ git update-index --index-info
    040000 tree 4b825dc642cb6eb9a060e54bf8d69288fbee4904    path/to/empty-folder
     

    Komutu yaz─▒n ve ard─▒ndan ikinci sat─▒ra girin. Giri┼činizi sonland─▒rmak i├žin Enterve ard─▒ndan Ctrl+ tu┼člar─▒na bas─▒n D. Not: format moddur [SPACE] [SPACE] yaz─▒n SHA-1hash [TAB] yolu (sekme ├Ânemlidir, cevap formatlamas─▒ onu korumaz).

  4. Bu kadar! Bo┼č klas├Âr├╝n├╝z dizininizde. Tek yapman gereken taahh├╝t etmek.

Bu ├ž├Âz├╝m k─▒sa ve g├Âr├╝n├╝┼če g├Âre iyi ├žal─▒┼č─▒yor ( EDIT bak─▒n! ), Ama hat─▒rlamak o kadar kolay de─čil ...

Bo┼č a─ča├ž SHA-1, cd i├žine git write-tree bo┼č bir SHA-1 ├ž─▒kt─▒ veren yeni bir bo┼č Git deposu olu┼čturarak bulunabilir .

D├ťZENLE:

Buldu─čumdan beri bu ├ž├Âz├╝m├╝ kullan─▒yorum. Hi├žbir yerde bir mod├╝l tan─▒mlanmad─▒─č─▒ haricinde, bir alt mod├╝l olu┼čturma ile tam olarak ayn─▒ ┼čekilde ├žal─▒┼č─▒yor gibi g├Âr├╝n├╝yor. Bu verirken hatalara yol a├žar git submodule init|update . Sorun ┼ču ki par├žay─▒ git update-index yeniden yaz─▒yor . 040000 tree 160000 commit

Ayr─▒ca, bu yolun alt─▒na yerle┼čtirilen hi├žbir dosya Git taraf─▒ndan fark edilmeyecektir, ├ž├╝nk├╝ ba┼čka bir depoya ait olduklar─▒n─▒ sanmaktad─▒r. Kolayca g├Âzden ka├žabilece─či i├žin bu ├žok k├Ât├╝!

Ancak, deponuzdaki Git alt mod├╝llerini zaten kullanmazsan─▒z (ve kullanmazsan─▒z) ve "bo┼č" klas├Âr├╝ bo┼č kal─▒r veya Git'in varl─▒─č─▒n─▒ bilmesini ve i├žeri─čini yok saymas─▒n─▒ istiyorsan─▒z, bu ├žimdik. Her zamanki gibi alt mod├╝ller ile ilerlemek bu ince ayardan daha fazla ad─▒m atar.


26







Belki de bo┼č bir dizin eklemek , en az diren├žli yol gibi g├Âz├╝kmektedir, ├ž├╝nk├╝ o dizinin var olmas─▒n─▒ bekleyen betikler vard─▒r (belki de ├╝retilen ikili dosyalar i├žin bir hedef olabilir). Ba┼čka bir yakla┼č─▒m, gerekti─či gibi dizini olu┼čturmak i├žin komut dosyalar─▒n─▒z─▒ de─či┼čtirmek olacakt─▒r .

 mkdir --parents .generated/bin ## create a folder for storing generated binaries
mv myprogram1 myprogram2 .generated/bin ## populate the directory as needed
 

Bu ├Ârnekte, ".generated" ├Âneki olmadan eri┼čebilmeniz i├žin dizine giden (bozuk) sembolik bir ba─člant─▒y─▒ kontrol edebilirsiniz (ancak bu iste─če ba─čl─▒d─▒r).

 ln -sf .generated/bin bin
git add bin
 

Kaynak a─čac─▒n─▒z─▒ temizlemek istedi─činizde ┼čunlar─▒ yapabilirsiniz:

 rm -rf .generated ## this should be in a "clean" script or in a makefile
 

Neredeyse bo┼č bir klas├Ârde s─▒k├ža ├Ânerilen yakla┼č─▒m─▒ kullan─▒rsan─▒z, ".gitignore" dosyas─▒n─▒ silmeden i├žeri─či silme zorlu─čuna da sahip olursunuz.

Olu┼čturulan t├╝m dosyalar─▒n─▒z─▒ k├Âk├╝n├╝ze a┼ča─č─▒dakini ekleyerek yok sayabilirsiniz:

 .generated
 

20







Diyelim ki tmp ad─▒nda bo┼č bir dizine ihtiyac─▒n─▒z var :

 $ mkdir tmp
$ touch tmp/.gitignore
$ git add tmp
$ echo '*' > tmp/.gitignore
$ git commit -m 'Empty directory' tmp
 

Ba┼čka bir deyi┼čle Git'e g├Ârmezden gelmesini (ve bo┼č dizindeki di─čer her ┼čeyi) ├Ânce .gitignore dosyas─▒n─▒ dizine eklemeniz gerekir.


20


2008-10-08





Ben de bu konuda bo┼č dizinlerle kar┼č─▒la┼č─▒yorum. Yer tutucu dosyalar─▒ kullanma sorunu, art─▒k gerekli olmad─▒k├ža bunlar─▒ olu┼čturman─▒z ve silmeniz gerekti─čidir (├ž├╝nk├╝ daha sonra alt dizinler veya dosyalar eklenmi┼čtir. B├╝y├╝k kaynak a─ča├žlar─▒yla bu yer tutucu dosyalar─▒ y├Ânetmek zahmetli ve hata olabilir. e─čilimli.

Bu nedenle, bu t├╝r yer tutucu dosyalar─▒n─▒n olu┼čturulmas─▒n─▒ / silinmesini otomatik olarak y├Ânetebilen a├ž─▒k kaynakl─▒ bir ara├ž yazmaya karar verdim. .NET platformu i├žin yaz─▒lm─▒┼č ve Mono (Linux i├žin .NET) ve Windows alt─▒nda ├žal─▒┼č─▒r.

Sadece bir g├Âz at─▒n: http://code.google.com/p/markemptydirs


14


2009-07-23





@ Artur79 ve @mjs'nin cevaplar─▒n─▒ seviyorum, bu y├╝zden ikisinin bir kombinasyonunu kulland─▒m ve projelerimiz i├žin standart hale getirdim.

 find . -type d -empty -exec touch {}/.gitkeep \;
 

Ancak, geli┼čtiricilerimizden yaln─▒zca birka├ž─▒ Mac veya Linux'ta ├žal─▒┼čmaktad─▒r. Windows ├╝zerinde ├žok ├žal─▒┼čma ve orada ayn─▒ ┼čeyi ger├žekle┼čtirmek i├žin bir e┼čde─čer basit bir astar bulamad─▒. Baz─▒lar─▒ Cygwin'i ba┼čka nedenlerden dolay─▒ kurdu─ču i├žin ├žok ┼čansl─▒lard─▒ , ancak bunun i├žin Cygwin'i re├žete yazmak g├Âr├╝n├╝yordu.

Daha iyi bir ├ž├Âz├╝m i├žin d├╝zenleyin

Bu nedenle, geli┼čtiricilerimizin ├žo─ču zaten Ant y├╝kl├╝ oldu─čundan, ilk d├╝┼č├╝nd├╝─č├╝m ┼čey, platformdan ba─č─▒ms─▒z olarak bunu ger├žekle┼čtirmek i├žin bir Ant derleme dosyas─▒ olu┼čturmakt─▒. Bu hala burada bulunabilirhttps://github.com/mig82/gitkeep

Ancak daha sonra bunu k├╝├ž├╝k bir yard─▒mc─▒ program komutu haline getirmenin daha iyi olaca─č─▒n─▒ d├╝┼č├╝nd├╝m, bu y├╝zden Python kullanarak yeniden yaratt─▒m ve burada PyPI'ye yay─▒nlad─▒m . Sadece ├žal─▒┼čt─▒rarak y├╝kleyebilirsiniz:

 pip3 install gitkeep2
 

.gitkeep Yinelemeli olarak dosya olu┼čturman─▒za ve silmenize izin verir ve ayn─▒ zamanda bu dizinlerin neden ├Ânemli oldu─čunu anlaman─▒z i├žin kendi arkada┼člar─▒n─▒za mesaj eklemenizi de sa─člar. Bu son bit bonus. .gitkeep Dosyalar─▒n kendi kendini belgelemesinin g├╝zel olaca─č─▒n─▒ d├╝┼č├╝nd├╝m .

 $ gitkeep --help
Usage: gitkeep [OPTIONS] PATH

  Add a .gitkeep file to a directory in order to push them into a Git repo
  even if they're empty.

  Read more about why this is necessary at: https://git.wiki.kernel.org/inde
  x.php/Git_FAQ#Can_I_add_empty_directories.3F

Options:
  -r, --recursive     Add or remove the .gitkeep files recursively for all
                      sub-directories in the specified path.
  -l, --let-go        Remove the .gitkeep files from the specified path.
  -e, --empty         Create empty .gitkeep files. This will ignore any
                      message provided
  -m, --message TEXT  A message to be included in the .gitkeep file, ideally
                      used to explain why it's important to push the specified
                      directory to source control even if it's empty.
  -v, --verbose       Print out everything.
  --help              Show this message and exit.
 

Umar─▒m yararl─▒ bulursunuz.


13







Yapamazs─▒n ve maalesef asla yapamayacaks─▒n. Bu Linus Torvald'─▒n kendisi taraf─▒ndan verilen bir karard─▒r. Bizim i├žin neyin iyi oldu─čunu biliyor.

D─▒┼čar─▒da bir kez okudu─čum bir yerde bir rant var.

Re: Bo┼č dizinleri buldum .. , ama belki ba┼čka bir tane var.

Ne yaz─▒k ki, ge├žici ├ž├Âz├╝mlerle birlikte ya┼čamak zorundas─▒n─▒z.


12







Bir .gitignore dosya ekledi─činizde , i├žine Git'in g├Ârmezden gelmesini istedi─činiz herhangi bir miktarda i├žerik koyacaksan─▒z * , yok say─▒lan i├žeri─či yanl─▒┼čl─▒kla eklememek i├žin sadece bir y─▒ld─▒z i┼čareti i├žeren tek bir sat─▒r eklemek isteyebilirsiniz. .


10







Belirtildi─či gibi, bo┼č dizinler eklemek m├╝mk├╝n de─čildir, ancak burada t├╝m dizinlere bo┼č .gitignore dosyalar─▒ ekleyen tek bir astar bulunur.

ruby -e 'require "fileutils" ; Dir.glob(["target_directory","target_directory/**"]).each { |f| FileUtils.touch(File.join(f, ".gitignore")) if File.directory?(f) }'

Kolay eri┼čim i├žin bunu bir Rakefile'e soktum.


8







Jamie Flournoy'un ├ž├Âz├╝m├╝ harika ├žal─▒┼č─▒yor. ─░┼čte tutmak i├žin biraz geli┼čmi┼č bir s├╝r├╝m .htaccess :

 # Ignore everything in this directory
*
# Except this file
!.gitignore
!.htaccess
 

Bu ├ž├Âz├╝mle ├Ârne─čin bo┼č bir klas├Âr i┼čleyebilirsiniz /log , /tmp yoksa /cache klas├Âr bo┼č kal─▒r.


8







Her zaman istedi─čim klas├Âr yap─▒s─▒n─▒ kontrol etmek ve benim i├žin proje i├žerisinde in┼ča etmek i├žin bir fonksiyon in┼ča ediyorum. Bo┼č klas├Ârler Git'te proxy taraf─▒ndan tutuldu─čundan, bu sorunu ├ž├Âzer.

 function check_page_custom_folder_structure () {
    if (!is_dir(TEMPLATEPATH."/page-customs"))
        mkdir(TEMPLATEPATH."/page-customs");    
    if (!is_dir(TEMPLATEPATH."/page-customs/css"))
        mkdir(TEMPLATEPATH."/page-customs/css");
    if (!is_dir(TEMPLATEPATH."/page-customs/js"))
        mkdir(TEMPLATEPATH."/page-customs/js");
}
 

Bu PHP'de, ancak ├žo─ču dilin ayn─▒ i┼člevi destekledi─činden eminim ve klas├Ârlerin olu┼čturulmas─▒ uygulama taraf─▒ndan halledildi─činden, klas├Ârler her zaman orada olacakt─▒r.


7







─░┼čte bir kesmek, ama i┼če yaramas─▒ komik (Git 2.2.1). @Teka'n─▒n ├Ânerdi─čine benzer, ancak hat─▒rlamas─▒ daha kolay:

  • Herhangi bir depoya bir alt mod├╝l ekleyin ( git submodule add path_to_repo )
  • Bu bir klas├Âr ve bir dosya ekleyecektir .submodules . Bir de─či┼čiklik yap.
  • .submodules Dosyay─▒ silin ve de─či┼čikli─či yap─▒n.

┼×imdi, teslim alma i┼člemi tamamland─▒─č─▒nda olu┼čturulan bir dizininiz var. Yine de ilgin├ž bir ┼čey, bu dosyan─▒n a─ča├ž nesnesinin i├žeri─čine bakarsan─▒z elde edece─činiz ┼čey:

├Âl├╝mc├╝l: ge├žerli bir nesne ad─▒ de─čil b64338b90b4209263b50244d18278c0999867193

Git'in gelecek s├╝r├╝mlerinde ├žal─▒┼čmay─▒ durdurabildi─či i├žin kullanmaya te┼čvik etmem. Hangi depoyu bozuk b─▒rakabilir.


7







Git'in dizinleri izlemesinin bir yolu yoktur, bu nedenle tek ├ž├Âz├╝m Git'in izlemesini istedi─činiz dizine bir yer tutucu dosya eklemektir.

Dosya adland─▒r─▒labilir ve istedi─činiz herhangi bir ┼čeyi i├žerebilir, ancak ├žo─ču ki┼či .gitkeep (baz─▒ insanlar VCS agnostic'i tercih etse de) adl─▒ bo┼č bir dosya kullan─▒r .keep .

├ľn ekli . dosya gizli dosya olarak i┼čaretler.

Ba┼čka bir fikir README , dizinin ne i├žin kullan─▒laca─č─▒n─▒ a├ž─▒klayan bir dosya eklemek olacakt─▒r.


7


2015-04-26





Yapamazs─▒n Bu, Git bak─▒mc─▒lar─▒n─▒n kas─▒tl─▒ bir tasar─▒m karar─▒d─▒r. Temel olarak Git gibi bir Kaynak Kod Y├Ânetim Sisteminin amac─▒ kaynak kodunu y├Ânetmektir ve bo┼č dizinler kaynak kod de─čildir. Git genellikle i├žerik izleyici olarak da tan─▒mlan─▒r ve yine bo┼č dizinler i├žerik de─čildir (ger├žekte tam tersi), bu nedenle izlenmezler.


5







Birden fazla anlamsal dizinde ├žok fazla ge├žici veri bar─▒nd─▒racak bir klas├Âr eklemek istiyorsan─▒z, o zaman bir yakla┼č─▒m k├Âk├╝n├╝ze buna benzer bir ┼čey eklemektir.

/app/data/**/*.* !/app/data/**/*.md

Daha sonra *.md , dizinlerin hepsinin reponun bir par├žas─▒ kalmas─▒n─▒ sa─člamak i├žin her bir dizinde a├ž─▒klay─▒c─▒ README.md dosyalar─▒ (veya bo┼č dosyalar, bu durumda oldu─ču gibi benzersiz ┼čekilde hedefleyebildi─činiz s├╝rece) ├Ânemli de─čildir . dosyalar (uzant─▒l─▒) g├Âz ard─▒ edilir. SINIRLAMA: . dizin adlar─▒na izin verilmiyor!

Bu dizinlerin t├╝m├╝n├╝ xml / images dosyalar─▒ veya herhangi bir ┼čeyle doldurabilir ve /app/data/ uygulaman─▒z i├žin depolama alan─▒ geli┼čtik├že zaman i├žinde daha fazla klas├Âr ekleyebilirsiniz (her bir depolama dizinin ne i├žin oldu─čunu a├ž─▒klamak i├žin README.md dosyalar─▒ kesinlikle).

Her yeni dizin i├žin yeni .gitignore bir tane olu┼čturarak daha da de─či┼čiklik yapman─▒za veya yerelle┼čtirmenize gerek yok .gitignore . Muhtemelen en ak─▒ll─▒ca ├ž├Âz├╝m de─čil ama terse gitignore-ak─▒ll─▒ca ve her zaman benim i├žin ├žal─▒┼č─▒yor. G├╝zel ve basit! ;)


g├Âr├╝nt├╝ tan─▒m─▒n─▒ buraya girin


5







Fray'e bir se├ženek daha ekleyerek.

Buna bir dizin eklemek istedi─činizi varsayal─▒m git , bununla ilgili t├╝m ama├žlar i├žin git bo┼č kalmal─▒ ve i├žeri─čini asla izlememeli, .gitignore burada ├žok say─▒da ├Ânerilen bir hile yapaca─č─▒z.

Belirtildi─či gibi format:

 *
!.gitignore
 

┼×imdi, bunu komut sat─▒r─▒nda yapman─▒n bir yolunu istiyorsan─▒z, bir taneye bas─▒p d├╝┼čt├╝, eklemek istedi─činiz dizinin i├žindeyken , y├╝r├╝tebilirsiniz:

 $ echo "*" > .gitignore && echo '!.gitignore' >> .gitignore && git add .gitignore
 

Kendim, bunu yapmak i├žin kulland─▒─č─▒m bir kabuk beti─čim var. Senaryoyu ne istersen isimlendir ve ismini kendi yolunda bir yere ekle ya da do─črudan referans ver:

 #!/bin/bash

dir=''

if [ "$1" != "" ]; then
    dir="$1/"
fi

echo "*" > $dir.gitignore && \
echo '!.gitignore' >> $dir.gitignore && \
git add $dir.gitignore
 

Bununla, eklemek istedi─činiz dizinden y├╝r├╝tebilir veya dizine ilk ve tek parametre olarak ba┼čvurabilirsiniz:

 $ ignore_dir ./some/directory
 

Bunu bo┼č bir klas├Âr izlemek istiyorsan─▒z (@GreenAsJade taraf─▒ndan bir a├ž─▒klama cevaben) Ba┼čka bir se├ženek, MAYIS gelecekte izlenen dosyalar─▒ i├žeren ama ┼čimdilik bo┼č olacak, ommit olabilir * gelen .gitignore dosyaya ve kontrol o i├žinde. Temel olarak, t├╝m dosya " beni g├Ârmezden gelme " diyor, ancak aksi takdirde dizin bo┼č ve izleniyor.

Ki┼čisel .gitignore dosya gibi g├Âr├╝necektir:

 !.gitignore
 

Bu kadar, kontrol edin ve dosyalar─▒ daha sonra izleyebilece─činiz bo┼č ama hen├╝z izlenen bir dizine sahipsiniz.

Dosyadaki bir sat─▒r─▒ saklamay─▒ ├Ânermemin nedeni, .gitignore amac─▒ vermesidir . Aksi takdirde, sat─▒r─▒n bir k─▒sm─▒ onu kald─▒rmay─▒ d├╝┼č├╝nebilir. ├çizginin ├╝st├╝ne yorum eklerseniz yard─▒mc─▒ olabilir.


4


2016-05-26





Bazen, "ger├žek" bo┼č ve mevcut bir dizine ihtiya├ž duyan k├Ât├╝ yaz─▒l─▒ k├╝t├╝phaneler ya da yaz─▒l─▒mlarla u─čra┼čman─▒z gerekir. Basit koymak .gitignore veya .keep onlar─▒ k─▒rmak ve bir hataya neden olabilir. A┼ča─č─▒dakiler bu durumlarda yard─▒mc─▒ olabilir, ancak hi├žbir garanti yok ...

─░lk ├Ânce gerekli dizini olu┼čturun:

 mkdir empty
 

Sonra bu dizine bozuk bir sembolik ba─člant─▒ eklersiniz (ancak yukar─▒da belirtilen kullan─▒m durumundan ba┼čka bir durumda, l├╝tfen README bir a├ž─▒klama ile kullan─▒n ):

 ln -s .this.directory empty/.keep
 

Bu dizindeki dosyalar─▒ yoksaymak i├žin k├Âk dizine ekleyebilirsiniz .gitignore :

 echo "/empty" >> .gitignore
 

Yok say─▒lan dosyay─▒ eklemek i├žin zorlamak i├žin bir parametre kullan─▒n:

 git add -f empty/.keep
 

─░┼člemden sonra dizininizde sembolik bir kopukluk var ve git dizini yarat─▒yor. Bozuk ba─člant─▒n─▒n baz─▒ avantajlar─▒ vard─▒r, ├ž├╝nk├╝ normal bir dosya de─čildir ve normal bir dosyaya i┼čaret etmez. Bu y├╝zden ÔÇť(dosya i├žermeyen)ÔÇŁ sorusuna bile uyuyor, niyetine de─čil, anlam─▒na g├Âre;

 find empty -type f
 

Bu komutlar bo┼č bir sonu├ž g├Âsteriyor, ├ž├╝nk├╝ bu dizinde dosya yok. Bu nedenle, bir dizindeki t├╝m dosyalar─▒ alan ├žo─ču uygulama, bu ba─člant─▒y─▒ g├Ârmez, en az─▒ndan bir "dosya varsa" veya "okunabilir" ise, bu ba─člant─▒y─▒ g├Ârmez. Baz─▒ scriptler bile orada hi├žbir dosya bulamaz:

 $ php -r "var_export(glob('empty/.*'));"
array (
  0 => 'empty/.',
  1 => 'empty/..',
)
 

Ancak bu ├ž├Âz├╝m├╝ sadece ├Âzel durumlarda kullanman─▒z─▒ ┼čiddetle tavsiye ederim, README bo┼č bir dizinde yaz─▒l─▒ olan iyi bir yaz─▒ genellikle daha iyi bir ├ž├Âz├╝md├╝r. (Ve bunun bir windows dosya sistemiyle ├žal─▒┼č─▒p ├žal─▒┼čmad─▒─č─▒n─▒ bilmiyorum ...)


4







Bunu yapman─▒n kolay bir yolu .gitkeep (┼ču anda) bo┼č tutmak istedi─činiz dizine bir dosya ekleyerek .

Daha fazla bilgi i├žin bu SOF cevab─▒na bak─▒n─▒z - bu da baz─▒ ki┼čilerin neden bir .gitignore dosyas─▒ ekleyerek (burada bir├žok cevapta belirtildi─či gibi) kafa kar─▒┼čt─▒r─▒c─▒ kongre kar─▒┼čt─▒r─▒c─▒ bulduklar─▒n─▒ a├ž─▒klar.


4







Bu kodu create_readme.php olarak kaydedebilir ve PHP kodunu Git projenizin k├Âk dizininden ├žal─▒┼čt─▒rabilirsiniz .

 > php create_readme.php
 

README dosyalar─▒n─▒ bo┼č olan t├╝m dizinlere ekler, b├Âylece bu dizinler daha sonra dizine eklenir.

 <?php
    $path = realpath('.');
    $objects = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path),       RecursiveIteratorIterator::SELF_FIRST);
    foreach($objects as $name => $object){
        if ( is_dir($name) && ! is_empty_folder($name) ){
            echo "$name\n" ;
            exec("touch ".$name."/"."README");
        }
    }

    function is_empty_folder($folder) {
        $files = opendir($folder);
        while ($file = readdir($files)) {
            if ($file != '.' && $file != '..')
                return true; // Not empty
            }
        }
?>
 

O zaman yapmak

 git commit -m "message"
git push
 

2







Bazen, yaln─▒zca "i├žerik" olarak kabul edilen dosyalar─▒ i├žerecek klas├Ârleri olan depolar─▒m var; bunlar, s├╝r├╝mlendirilmeyi umdu─čum dosyalar de─čil ve bu nedenle asla i┼členmemeleri gerekiyor. Git'in .gitignore dosyas─▒yla, t├╝m dizinleri yok sayabilirsiniz. Ancak depodaki klas├Âr├╝n bulunmas─▒n─▒n yararl─▒ olaca─č─▒ zamanlar vard─▒r. ─░┼čte bu ihtiyac─▒ kar┼č─▒lamak i├žin m├╝kemmel bir ├ž├Âz├╝m.

Ge├žmi┼čte yapt─▒─č─▒m ┼čey, depomun k├Âk dizinine bir .gitignore dosyas─▒ koymak ve sonra da klas├Âr├╝ d─▒┼člamakt─▒r:

 /app/some-folder-to-exclude
/another-folder-to-exclude/*
 

Ancak, bu klas├Ârler o zaman deponun bir par├žas─▒ olmaz. Orada bir README dosyas─▒ gibi bir ┼čey ekleyebilirsiniz. Ancak, uygulaman─▒za herhangi bir README dosyas─▒n─▒ i┼čleme konusunda endi┼čelenmemesini s├Âylemelisiniz.

Uygulaman─▒z orada bulunan klas├Ârlere ba─čl─▒ysa (bo┼č olsa da), s├Âz konusu klas├Âre bir .gitignore dosyas─▒ ekleyebilir ve iki amac─▒ ger├žekle┼čtirmek i├žin kullanabilirsiniz:

GitÔÇÖe klas├Ârde bir dosya oldu─čunu ve GitÔÇÖin depoya ekledi─čini s├Âyle. Git'e bu klas├Âr├╝n i├žeri─čini yoksaymas─▒n─▒ s├Âyle, eksi bu dosyay─▒ kendisi. Bo┼č dizinlerinize yerle┼čtirece─činiz .gitignore dosyas─▒:

 *
!.gitignore
 

─░lk sat─▒r (*) Git'e bu dizindeki her ┼čeyi yoksaymas─▒n─▒ s├Âyler. ─░kinci sat─▒r Git'e .gitignore dosyas─▒n─▒ yoksaymamas─▒n─▒ s├Âyler. Bu dosyay─▒ depoya eklemek istedi─činiz her bo┼č klas├Âre ekleyebilirsiniz.


2







Bir├žok ki┼či bu soruyu zaten cevaplad─▒. Sadece burada bir PowerShell s├╝r├╝m├╝ ekliyorum.

Dizindeki t├╝m bo┼č klas├Ârleri bul

Buraya bo┼č bir .gitkeep dosyas─▒ ekleyin

 Get-ChildItem 'Path to your Folder' -Recurse -Directory | Where-Object {[System.IO.Directory]::GetFileSystemEntries($_.FullName).Count -eq 0} | ForEach-Object { New-Item ($_.FullName + "\.gitkeep") -ItemType file}
 

2



─░lgili yay─▒nlar


Git deposundan bir dizin nas─▒l kald─▒r─▒l─▒r?

Varolan bir dizin a─čac─▒n─▒ Visual Studio'daki bir projeye nas─▒l eklerim?

Git deposunu belirli bir i┼čleme nas─▒l geri d├Ând├╝r├╝r (s─▒f─▒rlar)? [├žift]

Git'te, ilgisiz bir dal─▒ bir depoya tan─▒tman─▒n basit bir yolu var m─▒?

T├╝m klas├Âr├╝ tekrar tekrar depoya ekleyin

Veri ├žer├ževesine bo┼č bir s├╝tun nas─▒l eklenir?

Bitbucket'teki Git deposuna itilemiyor

Git deposunu ba┼čka bir dizine nas─▒l ta┼č─▒yabilir ve bu dizini git deposu nas─▒l yapabilirim?

T├╝m g├Ânderiler i├žin Git deposundaki bir dizini nas─▒l ta┼č─▒yabilirim?

Uzak Git deposuna yazma eri┼čimini nas─▒l kontrol edebilirim (ÔÇťzorlayabilir miyim?ÔÇŁ)

Etiketle ilgili di─čer sorular [git]


S├Âzc├╝k i├žermeyen bir ├žizgiyle e┼čle┼čmek i├žin normal ifade

Bir GitHub ├žatal deposunu nas─▒l g├╝ncellerim?

Bir monad nedir?

Sed kullanarak yeni sat─▒r─▒ (\ n) nas─▒l de─či┼čtirebilirim?

Bir kar─▒┼č─▒m nedir ve neden faydal─▒d─▒r?

Koleksiyon de─či┼čtirildi; numaraland─▒rma i┼člemi y├╝r├╝t├╝lemeyebilir

Android'de bir gecikmeden sonra bir y├Ântem nas─▒l ├ža─č─▒r─▒l─▒r

Ge├žici bir tablo olup olmad─▒─č─▒n─▒ kontrol edin ve ge├žici bir tablo olu┼čturmadan ├Ânce mevcut olup olmad─▒─č─▒n─▒ silin.

JQuery'yi Node.js ile kullanabilir miyim?

Android uygulamamdan nas─▒l e-posta g├Ânderebilirim?