我在Symfony 2项目上使用Git。我想切换分支,但我收到以下消息:
这些未跟踪的工作树文件将被结帐覆盖。 请在结账前移动或移除它们。
这里是文件列表:
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
public class Test extends JFrame {
private Timer timer;
private int sec, min, hrs;
private JPanel panel;
private JButton start;
private JLabel label1;
public Test() {
panel = new JPanel();
label1 = new JLabel("" + hrs + " : " + min + " : " + sec);
timer = new Timer(1000);
start = new ToggleButton("Start", "Stop");
panel.add(label1, BorderLayout.NORTH);
panel.add(start, BorderLayout.SOUTH);
getContentPane().add(panel, BorderLayout.CENTER);
setVisible(true);
}
public static void main(String[] args) {
Test test = new Test();
test.setSize(240, 360);
test.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void tick() {
sec++;
if (sec >= 60) {
min++;
sec = sec - 60;
}
if (min >= 60) {
hrs++;
min = min - 60;
}
label1.setText("" + hrs + " : " + min + " : " + sec);
}
private class ToggleButton extends JButton {
private boolean selected;
private String otherText;
public ToggleButton(String text, String otherText) {
super(text);
this.otherText = otherText;
this.setSelected(true);
this.fixListener();
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
private void fixListener() {
addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
if (isSelected()) {
setSelected(false);
timer.start();
} else {
setSelected(true);
timer.pause();
}
String text = getText();
setText(otherText);
otherText = text;
}
});
}
}
private class Timer extends Thread {
private Thread thread;
private boolean running;
private boolean paused;
private int ping;
public Timer(int ping) {
this.ping = ping;
running = false;
paused = true;
}
private void loop() {
while (running) {
if (!paused) {
tick();
}
delay(ping);
}
}
private void delay(int mil) {
try {
Thread.sleep(mil);
} catch (InterruptedException e) {
}
}
public void start() {
if (thread == null) {
thread = new Thread(this);
thread.start();
} else {
paused = false;
}
}
public void pause() {
paused = true;
}
@Override
public void run() {
running = true;
paused = false;
loop();
}
}
}
到目前为止我尝试了什么: 例如,我试图做
srv/myproject/src/mycompany/mybundle/Entity/Contacts.php~
srv/myproject/src/mycompany/mybundle/Entity/Products.php~
srv/myproject/src/mycompany/mybundle/Entity/Orders.php~
,它向我提供该文件不存在的消息。
我在“实体”-Folder中找不到任何“php~”文件。我只能看到常规的“php”文件。
为什么这些文件的文件名末尾有“〜”字符?
如何解决这个问题?
答案 0 :(得分:2)
名称以~
结尾的文件通常是某些编辑者制作的备份文件。无论它们是由你的编辑器制作的,我都不知道。
它们显示为未跟踪(Git说these untracked working tree files...
),这意味着它们不在索引中,因此您无法将它们提供给git rm --cached
指数。这反过来意味着 - 至少在这个点 - 你没有做错任何事。 :-)这可能令人放心,但并没有真正帮助。
尽管如此,git checkout <otherbranch>
抱怨建议结帐会覆盖它们。这意味着它们 包含在此git checkout
将要检出的提交中。反过来,这意味着某人,在某些时候,通过首先提交它们来做错事。 (至少,假设它们只是编辑器备份文件,不应该像这样版本化。)这可能是你以外的其他人,意味着你没有做错任何事,但是,嗯,仍然没有有帮助的。
这也意味着他们现在在你的工作树中 。他们如何到达那里很难说,尽管最明显的候选理由是你的编辑将它们作为编辑备份文件。
您需要做的是移动或删除这些文件(假设他们是编辑器备份,完全删除它们可能是安全的),以便它们不再在您的工作树中。然后git checkout
将能够将提交中的那些放入您的工作树中,而不会破坏您已经拥有的那些,因为您不再拥有它们。
提交这些文件是一个坏主意(假设一如既往,这些是编辑器备份)。在现有提交中很难解决这个问题。这取决于您和您的同事/同事是否要打扰。但是,无论如何,未来的提交都应该不包含这些文件。
为此,您或某人不仅必须现在删除它们,还必须检查具有它们的提交,然后将其删除(例如git rm *~
),然后修复这些提交或做出新的提交,告诉Git&#34;他们在那里,他们将在提交历史中,但从提交到这个新提交,现在删除它们。&#34;
此外,您或某人可能应该进行设置,以便Git默认忽略这些文件,以便它们不会将它们放入将来的提交中。通常的方法是在顶级*~
文件中添加一行.gitignore
。 (但是,一旦跟踪了文件,将其添加到.gitignore
无效,直到它们被显式删除取消跟踪。这是因为.gitignore
是错误的名称:它不是忽略的文件列表,未添加的文件列表,不抱怨忘记添加。)< / p>
答案 1 :(得分:0)
从git中删除不需要的文件:
git reset HEAD path / to / unwanted_file
创建.gitignore文件并向其添加*~
。