У меня очень странная проблема. Я создал простейшее из возможных воспроизведений выпуска.
package. json
{
"scripts": {
"start": "node index.js"
},
"dependencies": {
"isomorphic-git": "^1.3.1",
"rimraf": "^3.0.2"
}
}
index. js
const fs = require("fs"),
git = require("isomorphic-git"),
rimraf = require("rimraf"),
path = require("path"),
http = require("isomorphic-git/http/node");
async function main() {
const dirPath = path.join(process.cwd(), "small-test-repo");
const gitPath = path.join(dirPath, ".git");
const source = path.join(dirPath, "EXAMPLE");
const dest = path.join(dirPath, "SAMPLE.txt");
if (fs.existsSync(dirPath)) {
rimraf.sync(dirPath);
}
await git.clone({
fs,
http,
dir: dirPath,
url: "https://github.com/rtyley/small-test-repo.git"
});
rimraf.sync(gitPath);
fs.renameSync(source, dest);
await git.init({ fs, dir: dirPath });
await git.add({ fs, dir: dirPath, filepath: "SAMPLE.txt" });
}
(async () => {
try {
await main();
} catch (e) {
console.log(e);
}
})();
После выполнения кода выше если я go в каталог small-test-repo
и запускаю git status
, происходит самое странное -
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: EXAMPLE
new file: SAMPLE.txt
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: EXAMPLE
К моему недоверию я вижу, что файл EXAMPLE
каким-то образом появляется в статусе, даже если папка .git
была очищена перед переименованием файла и инициализацией репо git.
Любой, кто проливает свет на это таинственное поведение, навсегда заслужит мою благодарность.