मैंने विंडोज़ पर परिवर्तित फ़ाइलों को निर्यात करने के लिए एक php स्क्रिप्ट बनाई है। यदि आपके पास php सेट अप के साथ एक लोकलहोस्ट डेवलपमेंट सर्वर है तो आप इसे आसानी से चला सकते हैं। यह आपके पिछले रिपॉजिटरी को याद रखेगा और हमेशा एक ही फ़ोल्डर में निर्यात करेगा। निर्यात करने से पहले निर्यात फ़ोल्डर को हमेशा खाली किया जाता है। आपको लाल रंग में हटाई गई फ़ाइलें भी दिखाई देंगी, ताकि आप जान सकें कि सर्वर पर क्या हटाना है।
ये सिर्फ दो फाइलें हैं इसलिए मैं उन्हें यहां पोस्ट करूंगा। मान लेते हैं कि आपके रिपॉजिटरी अपने स्वयं के फ़ोल्डरों में c: / www के तहत स्थित हैं और http: // localhost भी c: / www को इंगित करता है और php-enable है। आइए इन 2 फाइलों को c: / www / git-export में डालें -
index.php:
<?php
/* create directory if doesn't exist */
function createDir($dirName, $perm = 0777) {
$dirs = explode('/', $dirName);
$dir='';
foreach ($dirs as $part) {
$dir.=$part.'/';
if (!is_dir($dir) && strlen($dir)>0) {
mkdir($dir, $perm);
}
}
}
/* deletes dir recursevely, be careful! */
function deleteDirRecursive($f) {
if (strpos($f, "c:/www/export" . "/") !== 0) {
exit("deleteDirRecursive() protection disabled deleting of tree: $f - please edit the path check in source php file!");
}
if (is_dir($f)) {
foreach(scandir($f) as $item) {
if ($item == '.' || $item == '..') {
continue;
}
deleteDirRecursive($f . "/" . $item);
}
rmdir($f);
} elseif (is_file($f)) {
unlink($f);
}
}
$lastRepoDirFile = "last_repo_dir.txt";
$repo = isset($_POST['repo']) ? $_POST['repo'] : null;
if (!$repo && is_file($lastRepoDirFile)) {
$repo = file_get_contents($lastRepoDirFile);
}
$range = isset($_POST['range']) ? $_POST['range'] : "HEAD~1 HEAD";
$ini = parse_ini_file("git-export.ini");
$exportDir = $ini['export_dir'];
?>
<html>
<head>
<title>Git export changed files</title>
</head>
<body>
<form action="." method="post">
repository: <?=$ini['base_repo_dir'] ?>/<input type="text" name="repo" value="<?=htmlspecialchars($repo) ?>" size="25"><br/><br/>
range: <input type="text" name="range" value="<?=htmlspecialchars($range) ?>" size="100"><br/><br/>
target: <strong><?=$exportDir ?></strong><br/><br/>
<input type="submit" value="EXPORT!">
</form>
<br/>
<?php
if (!empty($_POST)) {
/* ************************************************************** */
file_put_contents($lastRepoDirFile, $repo);
$repoDir = $ini['base_repo_dir'] ."/$repo";
$repoDir = rtrim($repoDir, '/\\');
echo "<hr/>source repository: <strong>$repoDir</strong><br/>";
echo "exporting to: <strong>$exportDir</strong><br/><br/>\n";
createDir($exportDir);
// empty export dir
foreach (scandir($exportDir) as $file) {
if ($file != '..' && $file != '.') {
deleteDirRecursive("$exportDir/$file");
}
}
// execute git diff
$cmd = "git --git-dir=$repoDir/.git diff $range --name-only";
exec("$cmd 2>&1", $output, $err);
if ($err) {
echo "Command error: <br/>";
echo implode("<br/>", array_map('htmlspecialchars', $output));
exit;
}
// $output contains a list of filenames with paths of changed files
foreach ($output as $file) {
$source = "$repoDir/$file";
if (is_file($source)) {
if (strpos($file, '/')) {
createDir("$exportDir/" .dirname($file));
}
copy($source, "$exportDir/$file");
echo "$file<br/>\n";
} else {
// deleted file
echo "<span style='color: red'>$file</span><br/>\n";
}
}
}
?>
</body>
</html>
git-export.ini:
; path to all your git repositories for convenience - less typing
base_repo_dir = c:/www
; if you change it you have to also change it in the php script
; in deleteDirRecursive() function - this is for security
export_dir = c:/www/export
और अब एक ब्राउज़र में लोकलहोस्ट / गिट-एक्सपोर्ट / लोड करें। स्क्रिप्ट को हमेशा c: / www / निर्यात में निर्यात करने के लिए सेट किया गया है - अपने वातावरण के अनुरूप होने के लिए सभी मार्ग बदलें या अपनी आवश्यकताओं के अनुरूप स्क्रिप्ट को संशोधित करें।
यदि आप Git स्थापित कर चुके हैं तो यह काम करेगा ताकि git कमांड आपके PATH में हो - जब आप विंडोज़ Git इंस्टॉलर चलाते हैं तो इसे कॉन्फ़िगर किया जा सकता है।