diff --git a/dvc/scm/git.py b/dvc/scm/git.py index a3317218ea..d5d72c1b84 100644 --- a/dvc/scm/git.py +++ b/dvc/scm/git.py @@ -210,6 +210,7 @@ def _add_entry_to_gitignore(self, entry, gitignore): entry = GitWildMatchPattern.escape(entry) with open(gitignore, "a+", encoding="utf-8") as fobj: + unique_lines = set(fobj.readlines()) fobj.seek(0, os.SEEK_END) if fobj.tell() == 0: # Empty file @@ -218,7 +219,9 @@ def _add_entry_to_gitignore(self, entry, gitignore): fobj.seek(fobj.tell() - 1, os.SEEK_SET) last = fobj.read(1) prefix = "" if last == "\n" else "\n" - fobj.write(f"{prefix}{entry}\n") + new_entry = f"{prefix}{entry}\n" + if new_entry not in unique_lines: + fobj.write(new_entry) def ignore_remove(self, path): entry, gitignore = self._get_gitignore(path)