A while ago I posted a question asking for feedback on a plan to fix a repo that was slow because of a lot of big, binary files. That question (not a must-read for this one): Fixing up a git repo that is slowed because of big binary files
Probably the size of your repo and your low value for pack.packSizeLimit makes the number of packs always be above gc.autopacklimit. So increase either of them to make sure the gc doesn't run each commit.
I'm not sure in what ways packSizeLimit would affect memory, but I don't believe it would have any significant effect. Please correct me if your experiments show otherwise. The parameters that directly affect memory use are pack.windowMemory and pack.deltaCacheSize.
In particular, an new 'git repack'(man) mode which ensures the resulting packs form a geometric progress by object count will mark packs that it does not want to repack as "kept in-core", and it will want to halt a reachability traversal as soon as it visits an object in any of the kept packs.But, it does not want to halt the traversal at non-kept, or .keep packs.
The obvious alternative is 'find_pack_entry()', but this doesn't quite suffice since it only returns the first pack it finds, which may or may not be kept (and the mru cache makes it unpredictable which one you'll get if there are options).
In an upcoming commit, 'git repack'(man) will want to create a pack comprised of all of the objects in some packs (the included packs) excluding any objects in some other packs (the excluded packs).
But the biggest downside is the lack of a reachability traversal.Because the caller passes in a list of objects directly, those objects don't get a namehash assigned to them, which can have a negative impact on the delta selection process, causing 'git pack-objects' to fail to find good deltas even when they exist.
The caller could formulate a reachability traversal themselves, but the only way to drive 'git pack-objects' in this way is to do a full traversal, and then remove objects in the excluded packs after the traversal is complete.This can be detrimental to callers who care about performance, especially in repositories with many objects.
'git pack-objects --stdin-packs' expects a list of pack names on stdin, where 'pack-xyz.pack' denotes that pack as included, and '^pack-xyz.pack' denotes it as excluded.The resulting pack includes all objects that are present in at least one included pack, and aren't present in any excluded pack.
This patch implements a '--geometric=' option in 'git repack'(man).This allows the caller to specify that they would like each pack to be at least a factor times as large as the previous largest pack (by object count).
We assume that there is a cutoff of packs before starting the repack where everything to the right of that cut-off already forms a geometric progression (or no cutoff exists and everything must be repacked).
We assume that everything smaller than the cutoff count must be repacked.This forms our base assumption, but it can also cause even the "heavy" packs to get repacked, for e.g., if we have 6 packs containing the following number of objects:
(where the '^' indicates the position of our split).To restore a progression, we move the split forward (towards larger packs)joining each pack into our new pack until a geometric progressionis restored.Here, that looks like:
This has the advantage of not repacking the heavy-side of packs too often while also only creating one new pack at a time.Another wrinkle is that we assume that loose, indexed, and reflog'd objects are insignificant, and lump them into any new pack that we create.This can lead to non-idempotent results.
git repack ensures this by determining a "cut" of packfiles that needto be repacked into one in order to ensure a geometric progression. Itpicks the smallest set of packfiles such that as many of the largerpackfiles (by count of objects contained in that pack) may be leftintact.
Unlike other repack modes, the set of objects to pack is determineduniquely by the set of packs being "rolled-up"; in other words, thepacks determined to need to be combined in order to restore a geometricprogression.
When --unpacked is specified, loose objects are implicitly included inthis "roll-up", without respect to their reachability. This is subjectto change in the future. This option (implying a drastically differentrepack mode) is not guaranteed to work with all other combinations ofoption to git repack).
The idea is to determine a (small-ish) set of packs which could be combined together so that the remaining packs form a geometric progression based on object size.In other words, if the smallest pack has N objects, then the next-largest pack would have at least 2N objects, and so on, doubling (or growing by an arbitrary constant) at each step along the way.
The read_packs_list_from_stdin() function didn't check that the lines it was reading were valid packs, and thus when doing the QSORT() with pack_mtime_cmp() we'd have a NULL "util" field.The "util" field is used to associate the names of included/excluded packs with the packed_git structs they correspond to.
The logic error was in assuming that we could iterate all packs and annotate the excluded and included packs we got, as opposed to checking the lines we got on stdin.There was a check for excluded packs, but included packs were simply assumed to be valid.
As noted in the test we'll not report the first bad line, but whatever line sorted first according to the string-list.c API.In this case I think that's fine.There was further discussion of alternate approaches.
While testing some ideas in 'git repack'(man), I ran it with '--quiet' and discovered that some progress output was still shown.Specifically, the output for writing the multi-pack-index showed the progress.
The 'show_progress' variable in cmd_repack() is initialized with isatty(2) and is not modified at all by the '--quiet' flag.The '--quiet' flag modifies the po_args.quiet option which is translated into a '--quiet' flag for the 'git pack-objects'(man) child process.However, 'show_progress' is used to directly send progress information to the multi-pack-index writing logic which does not use a child process.
Update 'repack' to ignore packs named on the command line with the '--keep-pack' option.Specifically, modify 'init_pack_geometry()' to treat command line-kept packs the same way it treats packs with an on-disk '.keep' file (that is, skip the pack and do not include it in the 'geometry' structure).
Without this handling, a '--keep-pack' pack would be included in the 'geometry' structure.If the pack is before the geometry split line (with at least one other pack and/or loose objects present), 'repack' assumes the pack's contents are "rolled up" into another pack via 'pack-objects'.However, because the internally-invoked 'pack-objects' properly excludes '--keep-pack' objects, any new pack it creates will not contain the kept objects.Finally, 'repack' deletes the '--keep-pack' as "redundant" (since it assumes 'pack-objects' created a new pack with its contents), resulting in possible object loss and repository corruption.
Unfortunately, this is not the case when --pack-kept-objects is combined with a --geometric repack.When doing a geometric repack, we include .keep packs when enumerating available packs only when pack_kept_objects is set.
So this all works fine when --no-pack-kept-objects (or similar) is given.Kept packs are excluded from the geometric roll-up, so when we go to delete redundant packs (with -d), no .keep packs appear "below the split" in our geometric progression.
But when --pack-kept-objects is given, things can go awry.Namely, when a kept pack is included in the list of packs tracked by the pack_geometry struct and part of the pack roll-up, we will delete the .keep pack when we shouldn't.
Note that this doesn't result in object corruption, since the .keep pack's objects are still present in the new pack.But the .keep pack itself is removed, which violates our promise from back in ee34a2b.
But there's more.Because repack computes the geometric roll-up independently from selecting which packs belong in a MIDX (with --write-midx), this can lead to odd behavior.Consider when a .keep pack appears below the geometric split (ie., its objects will be part of the new pack we generate).
We'll write a MIDX containing the new pack along with the existing .keep pack.But because the .keep pack appears below the geometric split line, we'll (incorrectly) try to remove it.While this doesn't corrupt the repository, it does cause us to remove the MIDX we just wrote, since removing that pack would invalidate the new MIDX.
This can occur, for instance, if a pack that was kept (either by having a .keep file, or during a geometric repack in which it is not rolled up) has a bitmap file, and the repack wrote a multi-pack index and bitmap.
When loading a reachability bitmap for the repository, the multi-pack one is always preferred, so the pack-based one is redundant.Let's remove it unconditionally, even if '-d' isn't passed, since there is no practical reason to keep both around.The patch below does just that.
What is being repacked? The local clone, the remote? Remember that local and remote are separate, it probably means that you are getting unpacked stuff that then is being packed locally... need to replicate the remote's cofiguration locally (and try again, i might be completely off base).
Nowadays there is no difference: git gc --aggressive operates according to the suggestion Linus made in 2007; see below. As of version 2.11 (Q4 2016), git defaults to a depth of 50. A window of size 250 is good because it scans a larger section of each object, but depth at 250 is bad because it makes every chain refer to very deep old objects, which slows down all future git operations for marginally lower disk usage. cc7c31b456 feliberk
https://sites.google.c...ff-download-202-yaztamupd
https://sites.google.c...anti-ban-downlo-nesinno8w
https://sites.google.com/view/xisulfipi
https://sites.google.com/view/xisucogu
https://sites.google.com/view/xojo-2019-release-31
https://sites.google.com/view/xojo-2020-crack
https://sites.google.c...iew/xojo-2021r21-download
https://sites.google.com/view/xmen-the-last-stand
https://sites.google.c...ell-lets-you-convert-resi
https://sites.google.com/view/xnxx-big-boobs-hd
Rhinoceroses are killed by poachers for their horns, which are bought and sold on the black market for high prices, leading to most living rhinoceros species being considered endangered. The contemporary market for rhino horn is overwhelmingly driven by China and Vietnam, where it is bought by wealthy consumers to use in traditional Chinese medicine, among other uses. Rhino horns are made of keratin, the same material as hair and fingernails, and there is no good evidence of any health benefits.[3][4][5] A market also exists for rhino horn dagger handles in Yemen, which was the major source of demand for rhino horn in the 1970s and 1980s.[6]
A subspecific hybrid white rhino (Ceratotherium s. simum C. s. cottoni) was bred at the Dv?r Krlov Zoo (Zoological Garden Dvur Kralove nad Labem) in the Czech Republic in 1977. Interspecific hybridisation of black and white rhinoceroses has also been confirmed.[10]
While the black rhinoceros has 84 chromosomes (diploid number, 2N, per cell), all other rhinoceros species have 82 chromosomes. Chromosomal polymorphism might lead to varying chromosome counts. For instance, in a study there were three northern white rhinoceroses with 81 chromosomes.[11]
Rhinoceroses are among the largest living land animals, with living species ranging in average weight from 775 kilograms (1,709 lb) in the Sumatran rhinoceros, to 2,300 kilograms (5,100 lb) in the white rhinoceros.[12] Some extinct rhinocerotids were considerably smaller and larger than living rhinoceroses, with the genus Menoceras from the Early Miocene of North America having an estimated body mass of 313 kilograms (690 lb),[12] comparable to sheep,[13] or a pig,[14] while Elasmotherium sibiricum from the Pleistocene of Eurasia has an estimated body mass of approximately 4,500 kilograms (9,900 lb).[12] The skulls of rhinoceroses are generally saddle-shaped and low, with rhinoceroses being primitively characterised by the presence of a chisel-shaped upper first incisor (I1) and a tusk-like lower second incisor (i2), with all other incisors and the canines typically being lost.[14] Black and white rhinoceroses completely lack incisors.[15] Living rhinoceroses have either one or two horns, which are formed from columns of densely packed corneocytes originating from dermal papillae. The development and growth of rhinoceros horns is similar to that of human nails, with both being largely made of keratin.[16] The horns are attached to a rugose (roughly textured) area on the surface of the skull. Horns are not a universal feature of rhinocerotids, with horns thought to be absent in many extinct rhinocerotids (such as most members of the subfamily Aceratheriinae[17]).[14]
The brains of rhinoceroses are relatively small compared to body size,[18][19] around 531 grams (18.7 oz) in an adult black rhinoceros.[19] The limb bones tend to be robust (proportionally thick and stocky). All living and the vast majority of extinct rhinoceroses have three toes on each foot.[14] The body is covered in an armour of thick skin made of a dense crosslinked network of collagen fibres that is stronger and stiffer than those of other mammals.[20] The skin exhibits prominent folding.[21] The skin in living species is grey to brown in colour, and typically sparsely covered in hair or hairless as adults, with the exception of the eyelashes, ears, and the tail-brush.[22] The exception is the Sumatran rhinoceros, which is often covered with a considerable amount of hair.[23]
Living rhinoceroses' gregariousness varies between species. Adult males tend to be solitary, and this is also true of female Asian rhinoceroses, though the females of African species sometimes form groups, with these groups being more common in white than black rhinoceroses. Rhinoceroses have widely varying diets ranging from strict grazing (such as the white rhinoceros) to largely browsing (such as the black rhinoceros) to a mixture between both (the Sumatran and Javan rhinoceros). As bulk feeders of low quality vegetation, rhinoceroses spend a majority of their time foraging.[24] Rhinoceroses are hindgut fermenters.[25]
All living rhinoceroses have a polyandrous and polygynous mating system where both males and females seek to mate with multiple individuals of the opposite sex. Male rhinoceroses guard reproductive age females until they are in full estrous though the females sometimes may drive away males until they are receptive. Male rhinoceroses taste the urine of female rhinoceroses and perform a flehmen response with the upper lip to determine their reproductive status. Adult males in the vicinity of oestrous females may become aggressive towards other males. These confrontations can range from ritualized behaviour to serious fighting that can result in significant injuries. In some species, male rhinoceroses are territorial, while in other species they are not or are only territorial depending on local environmental conditions. Females will sometimes reject males they consider undesirable, which results in them fleeing or fighting the male if cornered. During copulation, the male slides his neck up the back of the female, before using his neck as a lever to get his forelegs off the ground, before moving the front legs behind the shoulders of the female. Copulation can last several hours.[24] Pregnancy lasts for over a year, around 460 days in the black rhinoceros and 504 days in the white rhinoceros.[26]
The female generally gives birth in a secluded area and becomes aggressive towards other rhinoceroses for a while after giving birth. Calves typically stand up within 30 minutes of birth and begin to suck on their mother's teats within two hours of birth. The mother generally has a strong bond with her most recently born calf. The calf generally remains close to its mother the majority of the time, although at least in some species they are sometimes left considerable distances away. Up until they are around three years old, juvenile rhinoceroses are vulnerable to predation. Mothers are vigorously protective of their calves against potential predators. Juvenile one-horned rhinoceroses are rejected by their mothers around the time of the birth of her next calf.[24] There is generally a gap of several years between females giving birth again after having her previous calf, though the gap can be as short as a year and a half.[27] Rhinoceroses become sexually mature at around five to eight years of age, generally around a year later in males than in females in black and Sumatran rhinoceroses,[28][27] though male white rhinoceroses become socio-sexually mature at around 12 years of age, four years after females start giving birth.[29]
The name "black rhinoceros" (Diceros bicornis) was chosen to distinguish this species from the white rhinoceros (Ceratotherium simum). This can be confusing, as the two species are not truly distinguishable by color. There are four subspecies of black rhino: South-central (Diceros bicornis minor), the most numerous, which once ranged from central Tanzania south through Zambia, Zimbabwe and Mozambique to northern and eastern South Africa; South-western (Diceros bicornis occidentalis) which are better adapted to the arid and semi-arid savannas of Namibia, southern Angola, western Botswana and western South Africa; East African (Diceros bicornis michaeli), primarily in Tanzania; and West African (Diceros bicornis longipes) which was declared extinct in November 2011.[33] The native Tswanan name keitloa describes a South African variation of the black rhino in which the posterior horn is equal to or longer than the anterior horn.[34]
During the latter half of the 20th century, their numbers were severely reduced from an estimated 70,000[37] in the late 1960s to a record low of 2,410 in 1995. Since then, numbers have been steadily increasing at a continental level with numbers doubling to 4,880 by the end of 2010.[citation needed] As of 2008, the numbers are still 90% lower than three generations ago.[38]
Indian rhinos once inhabited many areas ranging from Pakistan to Myanmar and maybe even parts of China. Because of humans, they now exist in only several protected areas of India (in Assam, West Bengal, and a few pairs in Uttar Pradesh) and Nepal, plus a pair in Lal Suhanra National Park in Pakistan reintroduced there from Nepal. They are confined to the tall grasslands and forests in the foothills of the Himalayas. Two-thirds of the world's Indian rhinoceroses are now confined to the Kaziranga National Park situated in the Golaghat district of Assam, India.[41]
The Sumatran rhinoceros (Dicerorhinus sumatrensis) is the smallest extant rhinoceros species, as well as the one with the most hair. It can be found at very high altitudes in Borneo and Sumatra. Because of habitat loss and poaching, their numbers have declined, and it has become the second most threatened rhinoceros. About 275 Sumatran rhinos are believed to remain. There are three subspecies of Sumatran rhinoceros: the Sumatran rhinoceros proper (Dicerorhinus sumatrensis sumatrensis), the Bornean rhinoceros (Dicerorhinus sumatrensis harrissoni) and the possibly extinct Northern Sumatran rhinoceros (Dicerorhinus sumatrensis lasiotis).
Sumatran rhinoceros once were spread across South-east Asia, but now are on the verge of extinction, confined to several parts of Indonesia and Malaysia by reproductive isolation.[citation needed] It has been found through DNA comparison that the Sumatran rhinoceros is the most ancient extant rhinoceros and related to the extinct Eurasian woolly rhino species, Coelodonta. In 1994, Alan Rabinowitz publicly denounced governments, non-governmental organizations, and other institutions for lacking in their attempts to conserve the Sumatran rhinoceros. To conserve it, they would have to relocate them from small forests to breeding programs that could monitor their breeding success. To boost reproduction, the Malaysian and Indonesian governments could also agree to exchange the gametes of the Sumatran and (smaller) Bornean subspecies. The Indonesian and Malaysian governments have also proposed a single management unit for these two ancient subspecies.[49][50]