Git
Paquet d'installation silencieuse pour Git
2.56.0-18
Development
Utilities
Development
Utilities
- package: tis-git
- name: Git
- version: 2.56.0-18
- categories: Development,Utilities
- maintainer: WAPT Team,Tranquil IT,Jimmy PELÉ,Flavien SCHELFAUT
- editor: Software Freedom Conservancy
- licence: opensource_free,cpe:/a:gnu:gpl_v2,wapt_public
- locale: all
- target_os: darwin
- impacted_process: git
- architecture: all
- signature_date:
- size: 29.01 Mo
- homepage : https://git-scm.com/
package : tis-git
version : 2.56.0-18
architecture : all
section : base
priority : optional
name : Git
categories : Development,Utilities
maintainer : WAPT Team,Tranquil IT,Jimmy PELÉ,Flavien SCHELFAUT
description : Git is a free, open-source, decentralized version control system designed to quickly and efficiently manage all projects, from the smallest to the largest
depends :
conflicts :
maturity : PROD
locale : all
target_os : darwin
min_wapt_version : 2.3
sources : https://mirrors.edge.kernel.org/pub/software/scm/git/
installed_size :
impacted_process : git
description_fr : Git est un système de contrôle de version libre, gratuit et décentralisé, conçu pour gérer rapidement et efficacement tous les projets, des plus petits aux plus grands
description_pl : Git to darmowy, zdecentralizowany system kontroli wersji o otwartym kodzie źródłowym, zaprojektowany do szybkiego i wydajnego zarządzania wszystkimi projektami, od najmniejszych do największych
description_de : Git ist ein kostenloses, dezentralisiertes Open-Source-Versionskontrollsystem, das für die schnelle und effiziente Verwaltung aller Projekte, von den kleinsten bis zu den größten, entwickelt wurde
description_es : Git es un sistema de control de versiones descentralizado, gratuito y de código abierto diseñado para gestionar de forma rápida y eficaz todos los proyectos, desde los más pequeños a los más grandes
description_pt : O Git é um sistema de controlo de versões gratuito, de código aberto e descentralizado, concebido para gerir rápida e eficientemente todos os projectos, desde os mais pequenos aos maiores
description_it : Git è un sistema di controllo delle versioni gratuito, open-source e decentralizzato, progettato per gestire in modo rapido ed efficiente tutti i progetti, dai più piccoli ai più grandi
description_nl : Git is een gratis, open-source, gedecentraliseerd versiebeheersysteem dat is ontworpen om snel en efficiënt alle projecten te beheren, van de kleinste tot de grootste
description_ru : Git - это бесплатная децентрализованная система контроля версий с открытым исходным кодом, предназначенная для быстрого и эффективного управления всеми проектами, от самых маленьких до самых больших
audit_schedule :
editor : Software Freedom Conservancy
keywords : git,project,projects,version,control,system
licence : opensource_free,cpe:/a:gnu:gpl_v2,wapt_public
homepage : https://git-scm.com/
package_uuid : 7c0de4fa-0d89-44ba-88b9-6457eefbdf9f
valid_from :
valid_until :
forced_install_on :
changelog : https://github.com/git/git/blob/master/Documentation/RelNotes
min_os_version : 11
max_os_version :
icon_sha256sum : 4a6e5031edc6e22a06cb5f12e89dea8738b88839c2cb99e2e7e0d9df345e2252
signer : Tranquil IT
signer_fingerprint: 8c5127a75392be9cc9afd0dbae1222a673072c308c14d88ab246e23832e8c6bb
signature_date : 2026-10-13T10:23:04.000000
signed_attributes : package,version,architecture,section,priority,name,categories,maintainer,description,depends,conflicts,maturity,locale,target_os,min_wapt_version,sources,installed_size,impacted_process,description_fr,description_pl,description_de,description_es,description_pt,description_it,description_nl,description_ru,audit_schedule,editor,keywords,licence,homepage,package_uuid,valid_from,valid_until,forced_install_on,changelog,min_os_version,max_os_version,icon_sha256sum,signer,signer_fingerprint,signature_date,signed_attributes
signature : dPWAP9/LBJz5ch5lfLMWNCSRR4UxxBkaYZYGJlOiGQwl8k1nalRmOi5OZ1m2gJ52CkjZZ1dkDNGqfQEPMSTfU1w/uuR1z1sCGNuHLIVZ4oPz+2lYhY6yXiooKyqRAW+MGJYppg7PgR/7hw+BjwYqQy3A7SuGIXl8VVvaWFdGpUPZv8Q1pPN8xQxRFM6iwHjRPtb4zzEgGB43Lln3XRtoZi5AqcvV7akS2y1pia8UzFPx47TyJKUnbQRgTvzSbNkJ1y6sf1iN8C1Wqm3rzy9AlTfEglD1zyKa8iXRUX+eKlWMRgivxEZwfMZNr81sBqVGPKca5/qiic6bWCyLrtDKwA==
# -*- coding: utf-8 -*-
from setuphelpers import *
import os
import tarfile
app_dir = "/usr/local/git"
manpaths_file = "/etc/manpaths.d/git"
def install():
killalltasks(ensure_list(control.impacted_process))
if isdir(app_dir):
remove_tree(app_dir)
with tarfile.open(glob.glob("git-*-macos-universal.tar.gz")[0]) as tar:
tar.extractall("/usr/local")
mkdirs("/usr/local/bin")
for bin_path in glob.glob(makepath(app_dir, "bin", "*")):
link_path = makepath("/usr/local/bin", os.path.basename(bin_path))
if not os.path.lexists(link_path):
os.symlink(bin_path, link_path)
with open(manpaths_file, "w", encoding="utf-8") as f:
f.write(f"{app_dir}/share/man\n")
def uninstall():
killalltasks(ensure_list(control.impacted_process))
for bin_path in glob.glob(makepath(app_dir, "bin", "*")):
link_path = makepath("/usr/local/bin", os.path.basename(bin_path))
if os.path.islink(link_path) and os.readlink(link_path) == bin_path:
os.remove(link_path)
if isfile(manpaths_file):
remove_file(manpaths_file)
if isdir(app_dir):
remove_tree(app_dir)
def audit():
app_path = makepath(app_dir, "bin", "git")
if not isfile(app_path):
print(f"{control.name} is not installed")
return "ERROR"
installed_version = run(f'"{app_path}" --version').split()[2]
if Version(installed_version) < Version(control.get_software_version()):
print(f"{control.name} is installed in version ({installed_version}) instead of ({control.get_software_version()})")
return "WARNING"
else:
print(f"{control.name} ({installed_version}) is installed")
return "OK"
# -*- coding: utf-8 -*-
from setuphelpers import *
from setupdevhelpers import *
import os
import tarfile
import tempfile
install_prefix = "/usr/local/git"
arch_list = ["arm64", "x86_64"]
def install_command_line_tools():
"""clang, make and the macOS SDK are needed to build git"""
if isfile("/Library/Developer/CommandLineTools/usr/bin/clang"):
return
# This file makes softwareupdate list the Command Line Tools without prompting the user
run("touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress")
clt_label = [line.split("Label: ")[1] for line in run("softwareupdate --list").splitlines() if "Label: Command Line Tools" in line][-1]
print(f"Installing: {clt_label}")
run(f'softwareupdate --install "{clt_label}"', timeout=1200)
remove_file("/tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress")
def extract_tar(tar_path, extract_path="."):
with tarfile.open(tar_path, "r:*") as tar:
tar.extractall(extract_path)
def build_git(version, source_bin, manpages_bin, latest_bin):
build_root = tempfile.mkdtemp(prefix="tis-git-")
src_dir = makepath(build_root, f"git-{version}")
staging_dir = makepath(build_root, "staging")
app_dir = staging_dir + install_prefix
arch_flags = " ".join(f"-arch {arch}" for arch in arch_list) + f" -mmacosx-version-min={control.min_os_version}"
make_dict = {
"prefix": install_prefix,
"CFLAGS": f"-O2 {arch_flags}",
"LDFLAGS": arch_flags,
# Only the macOS SDK libraries (libcurl, expat, iconv, CommonCrypto): nothing from Homebrew, MacPorts or Fink
"NO_HOMEBREW": "YesPlease",
"NO_DARWIN_PORTS": "YesPlease",
"NO_FINK": "YesPlease",
# Not in the macOS SDK: translations, Tcl/Tk (gitk, git gui), Python (git p4), Rust toolchain
"NO_GETTEXT": "YesPlease",
"NO_TCLTK": "YesPlease",
"NO_PYTHON": "YesPlease",
"NO_RUST": "YesPlease",
"INSTALL_SYMLINKS": "YesPlease",
"SKIP_DASHED_BUILT_INS": "YesPlease",
}
make_options = " ".join(f'{key}="{value}"' for key, value in make_dict.items())
try:
extract_tar(source_bin, build_root)
print(f"Building: git {version}")
run(f'make -C "{src_dir}" -j{os.cpu_count()} {make_options} all contrib/credential/osxkeychain/git-credential-osxkeychain', timeout=1800)
run(f'make -C "{src_dir}" {make_options} DESTDIR="{staging_dir}" install install-git-credential-osxkeychain')
mkdirs(makepath(app_dir, "share", "man"))
extract_tar(manpages_bin, makepath(app_dir, "share", "man"))
mkdirs(makepath(app_dir, "etc"))
with open(makepath(app_dir, "etc", "gitconfig"), "w", encoding="utf-8") as f:
f.write("[credential]\n\thelper = osxkeychain\n")
# Fails if the binary does not contain both architectures
run(f'lipo "{makepath(app_dir, "bin", "git")}" -verify_arch {" ".join(arch_list)}')
with tarfile.open(latest_bin, "w:gz") as tar:
tar.add(app_dir, arcname="git")
finally:
remove_tree(build_root)
def update_package():
package_updated = False
proxies = get_proxies()
if not proxies:
proxies = get_proxies_from_wapt_console()
app_name = control.name
base_url = "https://mirrors.edge.kernel.org/pub/software/scm/git"
sha256sums_url = f"{base_url}/sha256sums.asc"
print(f"URL used is: {sha256sums_url}")
sha256sums = wgets(sha256sums_url, proxies=proxies)
if isinstance(sha256sums, bytes):
sha256sums = sha256sums.decode("utf-8")
sha256_dict = {}
for line in sha256sums.splitlines():
parts = line.split()
if len(parts) == 2 and len(parts[0]) == 64:
sha256_dict[parts[1]] = parts[0]
# Final releases only: "git-2.56.0.tar.xz", not "git-2.56.0.rc1.tar.xz" nor "git-manpages-2.56.0.tar.xz"
source_versions = [name[len("git-"):-len(".tar.xz")] for name in sha256_dict if name.startswith("git-") and name.endswith(".tar.xz")]
version = max((v for v in source_versions if all(part.isdigit() for part in v.split("."))), key=Version)
print(f"Latest {app_name} version is: {version}")
latest_bin = f"git-{version}-macos-universal.tar.gz"
if not isfile(latest_bin):
install_command_line_tools()
download_dir = tempfile.mkdtemp(prefix="tis-git-src-")
try:
downloaded_bins = []
for source_name in [f"git-{version}.tar.xz", f"git-manpages-{version}.tar.xz"]:
download_url = f"{base_url}/{source_name}"
print(f"Download URL is: {download_url}")
downloaded_bins.append(makepath(download_dir, source_name))
wget(download_url, downloaded_bins[-1], sha256=sha256_dict[source_name], proxies=proxies)
build_git(version, downloaded_bins[0], downloaded_bins[1], makepath(os.getcwd(), latest_bin))
finally:
remove_tree(download_dir)
else:
print(f"Binary is present: {latest_bin}")
for f in glob.glob("git-*-macos-universal.tar.gz"):
if f != latest_bin:
remove_file(f)
if Version(version) > Version(control.get_software_version()):
print(f"Software version updated (from: {control.get_software_version()} to: {Version(version)})")
package_updated = True
else:
print(f"Software version up-to-date ({Version(version)})")
control.set_software_version(version)
control.save_control_to_wapt()
return package_updated
38d056ab130f7bf7c481c12636a4e9959de36561d3dfcbe54c6e3571bc0c1dc3 : WAPT/certificate.crt
171dbf016eec5b602476d75411af469c3152bc381994ce9b9f4a1f64e952a5c7 : WAPT/control
4a6e5031edc6e22a06cb5f12e89dea8738b88839c2cb99e2e7e0d9df345e2252 : WAPT/icon.png
ac28e2b6617bf19f40062d5ee55378b08c22980b86b29d8840e45caefd917d4e : git-2.56.0-macos-universal.tar.gz
8fcd44f4ef8592173915e12844eb3b5de8834cb1a507ea293d68d98dfb55a5f5 : luti.json
8caad6606eef779d148146b8d3c34bef6e89fa07cfa62f3dc556417e6f0da7b8 : setup.py
4936a64d7b374b97f765670cf77455a11885f77eaff0f8d5e2c5fc408c4ac7c2 : update_package.py